1

如果表中列出了两种类型的产品,我正在尝试列出查询。这是我的数据库中的内容:

表格1

productID    
productDescription   
productYear

表2

porductID2
productDescription
productID (foreign Key from table1)

表 1 有:

01, Ball, 2001
02, Cone, 2002
03, Cube, 2010

表2有

01, BallBaring, 01
02, LittleBall, 01 
03, BallBaring, 02
04, LittleBall, 02
05, BallBaring, 03

我试图只显示包含 BallBaring 和 LittleBall 的结果。因此,当我搜索结果时,它只显示包含 BallBaring 和 LittleBall 的结果:我有以下搜索:

SELECT table2.productDescription, table1.productDescription, table2.productID2 
FROM table1, table2 
WHERE table1.productID = table2.productID2 
  AND (table2.productDescription = 'LittleBall' 
       OR table2.productDescription = 'BallBaring');

但这会带回所有具有 BallBaring 或 LittleBall 的产品,而不仅仅是那些同时具有 BallBaring 和 LittleBall 的产品,如果我使用 AND 而不是 OR,它什么也不会带回来。

4

2 回答 2

1

这个问题被称为Relational Division您正在搜索与所有条件匹配的特定值。

SELECT  a.*
FROM    table1 a
        INNER JOIN
        (
            SELECT  productID
            FROM    table2
            WHERE   productDescription IN ('BallBaring', 'LittleBall')
            GROUP   BY productID
            HAVING  COUNT(*) = 2
        ) b ON a.productID = b.productID

输出

╔═══════════╦════════════════════╦═════════════╗
║ PRODUCTID ║ PRODUCTDESCRIPTION ║ PRODUCTYEAR ║
╠═══════════╬════════════════════╬═════════════╣
║         1 ║ Ball               ║        2001 ║
║         2 ║ Cone               ║        2002 ║
╚═══════════╩════════════════════╩═════════════╝
于 2013-03-12T14:27:52.253 回答
1

看起来您正在加入productID2而不是外键 ( productID)。这应该有效:

SELECT b.productDescription, a.productDescription, b.productID2
FROM table1 a
JOIN table2 b ON b.productID = a.productID
WHERE b.productDescription IN ('LittleBall', 'BallBearing')

结果

| 产品描述 | 产品描述 | 产品ID2 |
-------------------------------------------------- --------
| 小球 | 球 | 2 |
| 小球 | 锥体 | 4 |

查看演示

于 2013-03-12T14:01:06.737 回答