2015-09-09 6 views
0

Я изо всех сил пытаюсь выяснить, как я могу проверить две вещи из одной таблицы, не делая два вызова mysql.Как сделать несколько счетчиков/существует в одном запросе?

У меня есть таблица Members. Я хотел бы проверить, существует ли определенное значение в столбце MemberID и существует ли определенное значение в столбце PhoneNumber. MemberID и PhoneNumber индексируются.

Но что-то не так с синтаксисом, который я пытаюсь. Например, каждый из

SELECT COUNT(1) AS IDExists FROM Members WHERE MemberID = '999999999999' LIMIT 1 

и

SELECT COUNT(1) AS PhoneExists FROM Members WHERE PhoneNumber = '5555555555' LIMIT 1 

работ. Почему их нельзя комбинировать, как-то вроде

SELECT (COUNT(1) AS IDExists FROM Members WHERE MemberID = '999999999999' LIMIT 1), (COUNT(1) AS PhoneExists FROM Members WHERE PhoneNumber = '5555555555' LIMIT 1) 

?

Или, может быть, так как я только заботиться, происходит ли значение ноль раз, или вообще, что-то вроде

SELECT EXISTS (SELECT 1 FROM Members WHERE MemberID = '999999999999') 

?

Но, к сожалению, что-то не так с этим синтаксисом даже для одного из моих запросов.

Любые предложения о том, как это сделать?

ответ

1

Вы можете объединить два рабочих запрос следующим образом:

select a.IDExists, b.PhoneExists 
from (SELECT COUNT(1) AS IDExists FROM Members WHERE MemberID = '999999999999' LIMIT 1) a, 
    (SELECT COUNT(1) AS PhoneExists FROM Members WHERE PhoneNumber = '5555555555' LIMIT 1) b 

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

Я не уверен, насколько велика таблица и какие индексы она имеет. Если таблица большая, то, возможно, у вас есть индексы на столбцах MemberID и PhoneNumber соответственно, тогда приведенный выше запрос вернет результат быстро.

+0

Да, есть индексы на «MemberID» и «PhoneNumber». Это важно в ответе, поэтому я обновляю вопрос соответствующим образом. – Aaron

2

Вы хотите условного SUM

SQL FIDDLE

SELECT 
    SUM(CASE 
      WHEN PhoneNumber = '5555555555' THEN 1 
      ELSE 0 
     END) PhoneExists, 
    SUM(CASE 
      WHEN MemberID = '999999999999' THEN 1 
      ELSE 0 
     END) IDExists 
FROM Members 
+0

Что-то не так с синтаксисом вокруг SUM здесь ... – Aaron

+1

@ntalbs 'SUM' вернет только одну строку. Я включаю SqlFiddle в свой ответ и исправляю ошибку синтаксиса. –

+0

К сожалению. Да, ты прав. Я пропустил это. – ntalbs