1

我一直在努力解决这个问题。头靠墙。我知道这必须很容易。

我想选择与参考表上的多个条件匹配的项目。这是一个示例模式,可以帮助说明问题

tblCars
------------
CarID
CarName

tblCarColors
------------
ColorID
Color

tblCarColorXRef
------------
ID
CarID
ColorID

基本上,我想找到我正在搜索的具有多种颜色的汽车。继续这个例子。假设汽车表中的丰田是多色的..黑色和黄色

丰田的 CarID 为 1

黑色的 ColorID 为 1,黄色为 2

我需要在 tblCarColorXRef 表中找到匹配 1 和 2 的所有汽车。必须是“和”。我不想找到黑色的汽车或黄色的汽车,而是同时包含黄色和黑色的汽车。

问题是我可以搜索 WHERE ColorID = 1 AND ColorID = 2。这永远不会是真的,所以这就是头部撞击开始的地方。我需要用其他表中的其他条件包装这个查询,我接近 HAVING 和 COUNT 但这不一定准确或正确。

旁注...汽车可以使用外部参照表具有一种或多种颜色。

4

3 回答 3

2

我会建议一些其他的事情。

  1. 从表名中删除“tbl”。
  2. 尝试去掉 ID 列——在本例中,它们不是必需的,因为汽车类型是您要查找的实际键(本田、丰田等)——与颜色相同。这也可能对您的外部参照有所帮助——它将有一个复合键作为主键,而不是一个 ID 列。看看这是否有帮助 - CarColorExample,如果没有,请给我更多信息,我会修改。
于 2013-08-14T02:02:18.477 回答
1

你可以试试这个。

select carid
  from tblCarColorXRef
 where colorid in (1,2)
 group by carid
having count(colorid = 2);

您可以使用count(disinct colorid) = 2,如果是汽车,颜色组合不是唯一的。

于 2013-08-14T01:11:09.633 回答
0

我对 SQL 有点生疏,所以我可能会忽略某些东西(例如语法错误或逻辑错误),但这可能会帮助您入门。这就是我要尝试的:

选择CarID在同一张表中至少有一个实例的 s 与ColorID1 并且在同一张表中至少有一个实例与ColorID2。

SELECT a.CarID
FROM tblCarColorXRef a
WHERE
(
    SELECT COUNT(1) AS carsWithColor1
    FROM tblCarColorXRef b
    WHERE b.CarID = a.CarID AND b.ColorID = 1
    LIMIT 1
) > 1
AND
(
    SELECT COUNT(1) AS carsWithColor2
    FROM tblCarColorXRef b
    WHERE b.CarID = a.CarID AND b.ColorID = 2
    LIMIT 1
) > 1
于 2013-08-14T01:26:11.347 回答