Выбор двух строк из одной строки таблицы в MySQL

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблица A (Id1, Id2, someValue)

Чего я хочу достичь в MySQL:

Мой SELECT запрос должен возвращать две строки:

 Id1, someValue
Id2, someValue
  

(на основе определенного условия — например, где someValue> N)

Как я могу добиться этого без использования UNION ?

Комментарии:

1. Почему бы не использовать a UNION ? Я не вижу другого пути…

2. Почему бы не использовать UNION оператор?

3. Я не хочу использовать объединение, потому что я не хочу дублировать весь сложный запрос, который в противном случае был бы таким же. В запросе, который был мне предоставлен, осталось соединить семь таблиц (хорошо, я знаю, что это уже не так эффективно, но все же). Это конкретное условие должно быть поставлено с одним из объединений.

4. Зачем вам нужно извлекать данные таким образом? Если это операция по умолчанию, вам лучше изменить схему БД.

5. Вы хотите, чтобы одна строка была разделена на две или только то, что для некоторых строк вы хотите вернуть column1 и column2 для других?

Ответ №1:

Поскольку это невозможно без использования UNION , вот как заархивировать это вместе с ним:

 (SELECT ID1 as ID, someValue FROM A WHERE someValue > N)
UNION
(SELECT ID2 as ID, someValue FROM A WHERE someValue > N)
  

Комментарии:

1. Используйте UNION ALL , иначе MySQL будет подавлять повторяющиеся строки, и вы можете в конечном итоге получить одну строку, даже если оба запроса вернули по одной строке каждый.

Ответ №2:

Как насчет:

 SELECT 
    CASE
        WHEN somecondition THEN ID1
        ELSE ID2
    END AS ID, someValue
FROM that_table
  

somecondition Может быть выражением, аналогичным тем, которые вы используете в WHERE предложении.

Ответ №3:

Не могли бы вы просто использовать или? например:

 select * from A where someValue = 'x' OR someValue 'y'
  

Комментарии:

1. Результатом будет (Id1, Id2, someValue), в то время как мне нужны две строки (Id1, someValue) и (Id2, someValue). [Мне нужны две строки]

2. очень верно, извините, что не рассмотрел ваш вопрос должным образом, лучше всего использовать объединение!

Ответ №4:

Если вам нужен возврат в отдельных строках, вам лучше разделить схему БД на «id, someValue». При вставке просто вставьте {id1_value, someValue}, {id2_value, someValue}, а при извлечении просто выберите из таблицы, где значение = someValue . Вы получите ожидаемый результат.

Если вам нужно каким-либо образом связать id1 и id2 (создать связанный список или что-то еще), вы можете добавить соответствующий идентификатор к записи. Схема может быть {id, value, related_id} .