2

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

你好。

我想要以下内容:

仅查找“类型”为 1 AND 2 AND 3 的“id”

这不起作用:

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
4

7 回答 7

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')
于 2009-12-29T19:59:22.307 回答
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
于 2009-12-29T19:57:57.943 回答
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 文档)

于 2009-12-29T19:58:56.960 回答
1

您可以使用集合的交集来做到这一点

SELECT id FROM table WHERE type = 1
  INTERSECT
SELECT id FROM table WHERE type = 2
  INTERSECT
SELECT id FROM table WHERE type = 3

我在想是否还有更简单的查询,但现在我不知道

于 2009-12-29T20:01:06.157 回答
0

如果我理解正确,您不能LIMIT 1在查询末尾添加吗?

于 2009-12-29T19:55:20.117 回答
-1

您选择不可能。对于每一行,类型不能同时是三个东西。

于 2009-12-29T19:59:35.790 回答
-2

你做错了什么。您不应该有多个具有相同 ID 的行。它破坏了拥有一个的意义。您的 id 列应该是自动递增的主键。

我认为你应该回去重新检查你的架构。或者至少添加更多关于你想要做什么的细节。

于 2009-12-29T19:57:25.370 回答