ВЫБЕРИТЕ все строки, ГДЕ id = id и другой столбец = другой столбец с этим идентификатором - PullRequest
0 голосов
/ 27 февраля 2019

Привет всем, я пытаюсь

 SELECT * rows WHERE id = (for example) 123.

Кроме того, я хочу выбрать столбец favorite_number из строки 123 и выбрать все ГДЕ id = favorite_number id = 123. Как я могу сделатьчто?

Вот что у меня пока есть:

SELECT * FROM users WHERE (id = :id) OR (id = :id AND get favorite_number from that row and search for it as ID);

Пример: ВЫБЕРИТЕ все строки с ИД = 123. Кроме того, если столбец этой строки favorite_number НЕ НУЛЕЙ И НЕ= 0, выберите favorite_number (в этом примере, скажем, число 456), а затем выполните поиск в той же таблице: WHERE id = 456.

Как я могу сделать все это в одном поисковом запросе? Надеюсь, это достаточно ясно, спасибо!

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Я предполагаю, что вы хотите 1 или 2 строки, и вы можете сделать это с помощью UNION:

select * from tablename
where id = 123
union all
select * from tablename
where id = (
  select favorite_number from tablename where id = 123
)

В случае, если favorite_number равно null или 0, то второй запрос ничего не будет выбран,

0 голосов
/ 27 февраля 2019
Select * From Users Where Id = 123 Or Id in
(Select favorite_number From Users Where Id = 123 And favorite_number Is Not Null And favorite_number <> 0)
0 голосов
/ 27 февраля 2019

кажется, что вы ищете оба условия в одних и тех же строках, но для другого столбца, таким образом, вы должны добавить условие AND, расширяющее где

SELECT * 
FROM users 
WHERE id = :id
AND favorite_number = :id ;
0 голосов
/ 27 февраля 2019

Вы можете использовать самостоятельное соединение;

SELECT * -- You should always explicitly select the columns rather than *
FROM    users us
LEFT JOIN users uf
         ON uf.Id = us.favorite_number
WHERE us.id = 123

Очевидно, что при необходимости вы можете перейти к внутреннему соединению и добавить дополнительные условия (или условия соединения).

...