Mysql SELECT缩小搜索范围

时间:2009-12-29 19:54:03

标签: mysql select where

编辑:那很快。我之所以这样,是因为该表是两个表之间的数据透视表,一个表具有“id”作为主键,另一个表示“类型”主键

您好。

我想要以下内容:

查找只找到“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

7 个答案:

答案 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列应该是自动递增的主键。

我认为您应该返回并重新检查您的架构。或至少添加有关您正在尝试做的更多细节。