如果我有这样的表:
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")
但它给了我一个空行。
有任何线索吗?
答案 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'
)