1

ここには、予想される行数を返さない比較的単純なクエリがあります。私の場合、次のクエリは正しく機能するはずですが、すべての行が複数回表示されるわけではないことを確認するために、ここで重要なものが欠けているに違いありません。

SELECT p.*, c.value AS color, g.value AS gender, p.value AS price
FROM   products p
LEFT JOIN product_fields c ON c.product_id = p.id AND c.name = 'color'
LEFT JOIN product_fields g ON g.product_id = p.id AND g.name = 'gender'
LEFT JOIN product_fields pp ON pp.product_id = p.id AND pp.name = 'price'
4

4 に答える 4

2

LEFT JOINの条件に一致しない不一致の行が取得されます。そのname = ..ため、多くの行が取得INNER JOINされます。代わりに使用することをお勧めします。使用する必要がある場合LEFT JOINは、これを行うことができます。

SELECT p.*, c.value AS color, g.value AS gender, p.value AS price
FROM   products p
LEFT JOIN
(
   SELECT *
   FROM product_fields
   WHERE name = 'color'
) AS c ON c.product_id = products.id 
LEFT JOIN 
(
   SELECT * 
   FROM product_fields
   WHERE name = 'gender'
) AS g ON g.product_id = products.id 
LEFT JOIN 
(
   SELECT * 
   FROM product_fields
   WHERE name = 'price'
) AS pp ON pp.product_id = products.id
于 2013-05-23T12:09:35.643 に答える
0

pテーブルのエイリアスを配置しますproductsが、結合ではテーブル名を使用します。結合でエイリアスを使用して、問題が解決するかどうかを確認してください。

SELECT p.*, c.value AS color, g.value AS gender, p.value AS price
FROM   products p
LEFT JOIN product_fields c ON c.product_id = p.id AND c.name = 'color'
LEFT JOIN product_fields g ON g.product_id = p.id AND g.name = 'gender'
LEFT JOIN product_fields pp ON pp.product_id = p.id AND pp.name = 'price'
于 2013-05-23T11:58:46.550 に答える