在同一列中多次使用“或”,“和”,“喜欢”

时间:2016-04-07 07:22:54

标签: mysql sql-like

如果我有这样的表:

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”。例如:

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")

但它给了我一个空行。

有任何线索吗?

2 个答案:

答案 0 :(得分: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'
顺便说一下,在进行模式匹配时,通常只应使用LIKE。对于完全匹配,请使用=IN来匹配任何多个项目。

答案 1 :(得分:1)

未经测试,但是这样的事情应该有效:获取具有ID的所有行,使其在具有A或C的所有ID的列表中找到,并且还在具有B的所有ID的列表上找到

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'
)