2016-04-07 5 views
0

Если у меня есть таблица вроде этого:Используя «или», «и», «как» несколько раз в той же колонке

id  car 
1  A 
1  B 
1  C 
1  D 
2  A 
2  B 
2  C 
2  F 
3  A 
3  C 
3  E 
3  F 
3  G 

что я хочу отличается «идентификатор», которые имеют ("A" or "C") and "B" в car. Например:

id car 
1  A 
1  B 
1  C 
2  A 
2  B 
2  C 

что я сделал

select * from table where (car like "A" or car like"C") and (car like "B") 

, но это дает мне пустую строку.

Любой ключ?

+3

Вы ищете два разных значения 'car' в ** той же ** строке. Это невозможно. – Barmar

+0

используйте или: 'выберите * из таблицы, где автомобиль похож на« A »или на автомобиль типа« C »или на автомобиль типа« B »' –

+0

@Barmar, что делать? – dPdms

ответ

1

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

SELECT t1.id 
FROM yourTable AS t1 
JOIN yourTable AS t2 ON t1.id = t2.id 
WHERE t1.car IN ('A', 'C') 
AND t2.car = 'B' 

BTW, как правило, следует использовать только LIKE, когда вы делаете поиск по шаблону. Для точных совпадений используйте = или IN для соответствия любому из нескольких элементов.

1

Неподтвержденный, но что-то вроде этого должно работать: получите все строки с идентификатором, чтобы он был найден в списке всех идентификаторов, имеющих A или C, а также в списке всех идентификаторов, имеющих B.

SELECT t.* 
FROM mytable t 
WHERE t.id IN (
    SELECT DISTINCT id 
    FROM mytable t2 
    WHERE t2.car='A' OR t2.car='C' 
) 
AND t.id IN (
    SELECT DISTINCT id 
    FROM mytable t3 
    WHERE t3.car='B' 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^