mysql ГДЕ XXX = ZZZ И XXX = ГГГ - PullRequest
       19

mysql ГДЕ XXX = ZZZ И XXX = ГГГ

0 голосов
/ 20 апреля 2011

Я новичок в mySql и пытаюсь выполнить фильтрацию запроса из одного столбца, используя данные из нескольких других таблиц. Например, я могу вытащить таблицу имен, таблицу их оценок в спортивных классах и таблицу спортивных.

Я могу запросить эту базу данных, используя

WHERE beta.sport = 'basketball'; извлекает все бета-идентификаторы для баскетбола и эффективно всех детей, которые играют в баскетбол. Теперь я хочу найти всех детей, которые играли в баскетбол и Лакрозе.

WHERE beta.sport = 'basketball' AND beta.sport = 'lacrosse';

Проблема в том, что запрос выполняется нормально, но возвращает ноль результатов. Из моих данных я знаю, что есть дети, которые играют в баскетбол и лакросс. Как вы фильтруете детей, которые играют в баскетбол и лакросс? ИЛИ возвращает детей, которые играют в лакросс или баскетбол. Я только хочу вернуть детей, которые играют в оба, и единственный доступ, который у меня есть, к списку видов спорта - из этой бета-версии.

ТАБЛИЦА бета

beta_id - sport ||
1  - basketball ||
2  - lacrosse ||
3  - football ||
4  - basketball ||

Ответы [ 4 ]

4 голосов
/ 20 апреля 2011
SELECT  *
FROM    names n
WHERE   (
        SELECT  COUNT(*)
        FROM    beta b
        WHERE   b.sport IN ('basketball', 'lacrosse')
                AND b.name = n.id
        ) = 2
1 голос
/ 20 апреля 2011

Вам нужно изменить И с ИЛИ

И не означает:

Я хочу, чтобы все дети играли в баскетбол И все дети, играющие в лакросс.

Чтоэто означает, что я хочу, чтобы все дети играли в лакросс и в баскетбол.

При использовании ИЛИ привыкайте заключать в скобки свое состояние как таковоеbeta.sport = 'лакросс')

0 голосов
/ 20 апреля 2011
WHERE BETA.SPORT = 'BASKETBALL' OR BETA.SPORT = 'LACROSSE'

Примечание де ИЛИ вместо И.

0 голосов
/ 20 апреля 2011

"ГДЕ beta.sport = 'баскетбол' И beta.sport = 'лакросс';" это не может вернуть строки, так как вы просите, чтобы beta.sport был ОБА баскетболом и лакроссом ... Попробуйте ИЛИ ... ГДЕ beta.sport = 'баскетбол' ИЛИ ​​beta.sport = 'лакросс';

Вы можете попробовать выбрать несколько вариантов ...

select * from sportsTable 
where itemID in 
(select itemID from sportsTable WHERE beta.sport = 'basketball') 
and itemID in 
(select itemID from sportsTable WHERE beta.sport = 'lacrosse') 
...