在同一列中多次使用 "or" ,"and", "like"
Using "or" ,"and", "like" several times in same column
如果我有这样的table:
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
我想要的是 car
中有 ("A" or "C") and "B"
的不同 "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")
但它给了我一个空行。
有线索吗?
您可以使用自连接
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
匹配多个项目中的任何一个。
未经测试,但类似这样的方法应该可行:获取所有具有该 ID 的行,使其在所有具有 A 或 C 的 ID 列表中以及在所有具有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'
)
如果我有这样的table:
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
我想要的是 car
中有 ("A" or "C") and "B"
的不同 "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")
但它给了我一个空行。
有线索吗?
您可以使用自连接
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
匹配多个项目中的任何一个。
未经测试,但类似这样的方法应该可行:获取所有具有该 ID 的行,使其在所有具有 A 或 C 的 ID 列表中以及在所有具有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'
)