5

私はphpに3つのテーブルを持ってい ます-mysqlproducts、product_fact、fact スキーマはこのようなものです

製品

 id , name (1000 records)

例えば-

id     |    name
-------+--------
1125   | key chain
1135   | bikes
1145   | cars

id =製品のID番号が異なり、製品ごとに一意のIDがあります。

name =製品の名前

product_fact

product_id, fact_id

product_id =これはproductsテーブルにあるのと同じIDです

fact_id =これはファクトIDです。すべての製品にはいくつかのファクトがあり、多くの製品には複数のファクトがあります。

例えば-

product_id  |  fact_id
------------+----------
1125        |      5
1125        |      7
1125        |      6
1135        |      8
1145        |      9
1145        |      2

事実

id , name

id =これはfact_idでテーブルproduct_factと同じです

name =これは事実の名前です。

例えば-

id      |    name
--------+---------
 2      |   black
 8      |   free
 5      |   sold
 6      |   coming soon
 9      |   new

製品に関連する特定のファクト名を選択したいのですが、このクエリを実行すると->

SELECT name
FROM fact
Where id = (SELECT fact_id
FROM product_fact
Where product_id='1125');

サブクエリが複数の行を返すと表示されます

しかし、私がこのクエリを実行すると->

SELECT name
FROM fact
Where id = (SELECT fact_id
FROM product_fact
Where product_id='1135');

それは私に正しい出力を与えます:無料

今何をすべきか他の製品のファクト名がヘルプを表示する必要があります、他に何をクエリに含める必要がありますか..ヘルプ

4

1 に答える 1

14

サブクエリをより安全にするには、IN代わりにを使用します=

SELECT name 
FROM   fact 
Where id IN (SELECT fact_id 
             FROM   product_fact 
             WHERE  product_id='1125');

または使用JOIN

SELECT  DISTINCT a.name
FROM    fact a
        INNER JOIN product_fact b
            ON a.ID = b.fact_ID
WHERE   b.product_ID = '1125'
于 2012-12-13T07:41:29.363 に答える