2013-09-13 8 views
0

У меня есть список идентификаторов и нужно проверить, находится ли пользователь с идентификатором в DB или нет в одном SELECT. Как SELECT WHERE IN(). Но SELECT WHERE IN() не соответствует моим потребностям, мне нужно, чтобы в одном SELECT различались те идентификаторы, которые находятся в таблице, а те, которые нет, но не используют какие-либо петли, например, несколько SELECT. Любые идеи приветствуются!Quick SELECT WHERE IN like with flag

+1

Можете ли вы показать его каким-то примером –

+0

С помощью всего одного оператора SELECT я не вижу способа сделать это в MySQL. Я бы предложил создать временную таблицу (которая будет выброшена после закрытия вашего соединения), ВСТАВИТЬ идентификаторы, которые у вас есть, а затем LEFT JOIN вашей существующей таблицы пользователей. – CBroe

+0

Вы пишете Cbroe. Это решение! Большое спасибо! – Andrew

ответ

0

Я не уверен, что это то, что вам нужно, но я думаю, у вас есть таблица 1, которая содержит много идентификаторов, и вы хотели бы видеть, какие из них встречаются в таблице 2, а какие нет?

select T1.ID, count(*) 'Times of occurrences in T2' 
from  table 1 T1 
      left outer join table 2 T2 
       ON T1.ID = T2.ID 
group by T1.ID 
+0

У меня нет таблицы 1, данные просто появляются как список идентификаторов. – Andrew

0

Необходимо предоставить более подробную информацию. Будет ли это один запрос, чтобы список мог быть жестко запрограммирован в запросе или вы хотите найти общее решение для любого списка идентификаторов? Как долго ваш список?

Для одного запроса и не очень длинного списка вы можете использовать union. На примере:

SELECT some_value, EXISTS(SELECT 1 FROM tableName WHERE user_id = some_value) 
UNION ALL 
SELECT other_value, EXISTS(SELECT 1 FROM tableName WHERE user_id = other_value) 
UNION ALL 
SELECT other_value2, EXISTS(SELECT 1 FROM tableName WHERE user_id = other_value2) 
UNION ALL 
..... 

Если список идентификаторов могут изменяться и/или состоит из тысяч записей невозможно. В списке у вас есть столбчатый макет, и вы хотите изменить его на результаты на уровне строк. В MsSQL есть предложения PIVOT, UNPIVOT, которые могут это сделать. В MySQL такое преобразование без явных объединений невозможно.