1

表に 2 種類の製品がリストされている場合、クエリをリストしようとしています。これは私のデータベースにあるものです:

表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 AND LittleBall を含む結果のみを表示しようとしています。したがって、結果を検索すると、BallBaring AND 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 のいずれかを持つすべての製品が返されます。OR の代わりに AND を使用すると、何も返されません。

4

2 に答える 2

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')

結果

| 製品の説明| 製品の説明| PRODUCTID2 |
-------------------------------------------------- -------
| リトルボール| ボール| 2 |
| リトルボール| コーン| 4 |

デモを見る

于 2013-03-12T14:01:06.737 に答える
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 に答える