您好。
我想要以下内容:
查找只找到“id”,其中“type”为1 AND 2 AND 3
这不起作用:
SELECT * FROM `table` WHERE `type` = 1 AND `type` = 2 AND `type` = 3;
SELECT语句应该只返回一行(id = 1)
表格
id type
1 1
1 2
1 3
2 1
2 2
3 3
答案 0 :(得分:6)
如果您只想知道ID,请添加关键字Distinct,然后选择ID, 其中 是 三种不同类型的记录......
Select Distinct id
FROM `table` t
WHERE Exists (Select * From Table Where id = t.id and Type = '1')
And Exists (Select * From Table Where id = t.id and Type = '2')
And Exists (Select * From Table Where id = t.id and Type = '3')
如果要查看Id和类型,请将类型添加到选择
Select Distinct id, Type
FROM `table` t
WHERE Exists (Select * From Table Where id = t.id and Type = '1')
And Exists (Select * From Table Where id = t.id and Type = '2')
And Exists (Select * From Table Where id = t.id and Type = '3')
如果您想查看具有该ID的每一行,请忽略不同的
Select id, Type
FROM `table` t
WHERE Exists (Select * From Table Where id = t.id and Type = '1')
And Exists (Select * From Table Where id = t.id and Type = '2')
And Exists (Select * From Table Where id = t.id and Type = '3')
答案 1 :(得分:2)
行不能同时具有值为1 AND 2 AND 3的列。这就像问你是不是“20岁,21岁和22岁”。你只能是其中之一。
你想要做类似的事情:
SELECT id WHERE type = 1
INTERSECT
SELECT id WHERE type = 2
INTERSECT
SELECT id WHERE type = 3
但MySQL不支持INTERSECT,所以你必须手工完成:
SELECT id FROM table WHERE
id IN (SELECT id FROM table WHERE
id IN (SELECT id FROM table WHERE type = 3)
AND type = 2)
AND type = 1
答案 2 :(得分:1)
您的搜索条件不兼容。字段'type'不能同时等于1,2和3.鉴于MySQL中没有INTERSECT,你可以连续两次加入同一个表:
SELECT id FROM
Table t1 JOIN Table t2 ON (t1.id=t2.id) JOIN Table t3 ON (t3.id=t2.id)
WHERE t1.type=1 AND t2.type=2 AND t3.type=3
这将构建具有相同ID的行的笛卡尔积,并仅保留具有所需三种类型的行。
学习SQL的基础知识可以为您提供很多帮助。周围有很多信息。 (包括MySQL文档)
答案 3 :(得分:1)
你可以使用集合
来做到这一点SELECT id FROM table WHERE type = 1
INTERSECT
SELECT id FROM table WHERE type = 2
INTERSECT
SELECT id FROM table WHERE type = 3
我在想是否也有更简单的查询,但现在我不知道
答案 4 :(得分:0)
如果我理解正确,您是否只能在查询结尾处添加LIMIT 1
?
答案 5 :(得分:-1)
你选择了不可能的事情。对于每一行,类型不能同时为三件事。
答案 6 :(得分:-2)
你做错了什么。您不应该有多个具有相同ID的行。它破坏了拥有一个的重点。您的id列应该是自动递增的主键。
我认为您应该返回并重新检查您的架构。或至少添加有关您正在尝试做的更多细节。