Mysql Select в условиях IF - PullRequest
       16

Mysql Select в условиях IF

0 голосов
/ 21 июня 2011

ищет выполнить запрос, который при определенных условиях получает данные из другой таблицы.

это как

select field1, field2.... IF(fieldX=3,select value from sub_table where cat_id = 3 order by id desc limit 0,1, NULL) from abc ;

Запрос в if действителен. Я привык к выполнению, если условия без каких-либо проблем, но это были все для некоторых статических значений или поля. Но это первый раз, когда я пытаюсь получить результат выбора, если и не могу его сделать.

Дело в том, что для какого-то определенного значения 'fieldX' мне нужно получить запись из другой таблицы.

С уважением Junaid

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Оберните свой внутренний выбор в ()

IF(fieldX=3, (select value from sub_table where cat_id = 3 order by id desc limit 0,1), NULL)
0 голосов
/ 12 декабря 2013

вы можете сделать что-то вроде:

select fields... from sub_table st
where st.idSubTable in(
Select IF(fieldX=3
,(
  select st.idSubTable from sub_table where cat_id = 3 order by id desc limit 0,1
 ),
  NULL)
 from abc);

это решит вашу проблему.

0 голосов
/ 21 июня 2011

почему бы не использовать левое соединение и использовать fieldX=3 в качестве условия соединения? если fieldX отличается от 3, sql заполняет поле NULL

select a.field1, a.field2, sub.value
from abc a
left join
(
  select value from sub_table
  where cat_id = 3
  limit 0,1
) sub
on a.fieldX = 3

или, если вы хотите получить все строки для соответствующих значений (я вижу, у вас есть cat_id = 3 и fieldX = 3, поэтому в основном cat_id = fieldX), просто используйте простое соединение. нет необходимости использовать сложные, если конструкции. sql был создан для быстрого и эффективного объединения:

select a.field1, a.field2, sub.value
from abc a
left join sub_table sub
on a.fieldX = sub.cat_id

обратите внимание, однако, что второй запрос вернет несколько строк, когда есть больше совпадений между fieldX и cat_id (неуникально cat_id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...