MySQL выбирает одно значение из таблицы, если есть два языка [дубликата]

0

Два языка в базе данных: (английский и итальянский)

word_id  word      language
1        day       eng
2        mister    eng
3        cat       eng
4        paper     eng
1        giorno    ita
2        signor    ita
3        gatto     ita

Мне нужно выбрать все слова: итальянское слово, если слово существует, а если нет - английское слово. Все вместе, это должно быть четыре слова (3 ita + 1 eng)

Теги:

2 ответа

1
Лучший ответ

Это должно получить то, что вы хотите:

SELECT DISTINCT 
    w1.word_id
    , Word = COALESCE(w2.word, w3.word)
    , [Language] = COALESCE(w2.[Language] , w3.[Language] )
FROM words w1
LEFT JOIN words w2 ON w2.word_id = w1.word_id AND w2.[Language]  = 'ita'
LEFT JOIN words w3 ON w3.word_id = w1.word_id AND w3.[Language]  = 'eng'
0

Объяснение дается комментариями внутри SQL. Объедините Union all клеи 2 результирующих набора с одинаковым количеством колоний вместе.

CREATE TABLE Table1        ('word_id' int, 'word' varchar(6), 'language' varchar(3));

INSERT INTO Table1
    ('word_id', 'word', 'language')
VALUES
    (1, 'day', 'eng'),        (2, 'mister', 'eng'),        (3, 'cat', 'eng'),
    (4, 'paper', 'eng'),
    (1, 'giorno', 'ita'),     (2, 'signor', 'ita'),        (3, 'gatto', 'ita')

Запрос:

 ( -- this selects all the italian words
    select word 
    from Table1
    where language = 'ita'  
  )
  union all
  ( -- this selects all words with ids that are not in the ita, if you have a 
    -- third language they would be selected as well
      select word
      from Table1 engWrd
      where not exists ( -- this ensures same id is not given by 'ita'
          select 1 
          from Table1 
          where engWrd.word_id = word_id 
          and language = 'ita'
      ) 
  )

Результат:

word
giorno
signor
gatto
paper

Ещё вопросы

Сообщество Overcoder
Наверх
Меню