2011-02-25 87 views
0

編輯2:
這裏沒有什麼可以找到的,它是我在其他地方的失敗。
誰知道!= NULL在MySQL中不起作用。
版主刪除此內容?
MySQL加入問題

我得到了一個eav數據庫,我需要從中選擇一些具有屬性的產品。
當我使用

select attribute1.value as a1, attribute2.value as a2, products.id 
from attributes attribute1, attributes attribute2, products 
where product.id = attribute1.product_id and attribute1.name = 'abc' and 
    product.id = attribute2.product_id and attribute2.name = 'def' 

當一個屬性上缺少一個產品我沒有得到所有的產品,我需要得到所有產品NULL如果有缺少的屬性。
當我使用

select attribute1.value as a1, attribute2.value as a2, products.id 
from products 
left join attributes as attribute1 on (product.id = attribute1.product_id and attribute1.name = 'abc') 
left join attributes as attribute2 on (product.id = attribute2.product_id and attribute2.name = 'def') 

我得到的所有產品,但所有產品都a1 = NULL即使他們不數據庫時。
問題是什麼?

實施例:

產品:

id 
1000 
1001 
1002 
1003 

屬性:

name product_id value 
abc  1000   1 
abc  1002   2 
def  1000   3 
def  1001   4 

預期結果:從第一查詢

id  a1  a2 
1000 1  3 
1001 NULL  4 
1002 2  NULL 
1003 NULL NULL 

結果:

0從第二查詢
id  a1  a2 
1000 1  3 

結果:

id  a1  a2 
1000 NULL  3 
1001 NULL  4 
1002 NULL NULL 
1003 NULL NULL 

編輯:

固定第二個查詢和示例。

+0

可否請你發佈一些示例數據庫條目,你會從查詢什麼期望?你的第二個查詢似乎也缺少了FROM子句。 – Zulan 2011-02-25 21:49:59

+0

@Zulan添加編輯 – Dani 2011-02-25 21:57:50

+0

除了一些更多的拼寫錯誤(product ** s ** .id),編輯後的查詢是正確的。它應該給出正確的結果。 – Zulan 2011-02-25 22:08:10

回答

0

查詢

select attribute1.value as a1, attribute2.value as a2, products.id 
left join attributes as attribute1 on (product.id = attribute1.product_id and attribute.name = 'abc') 
left join attributes as attribute2 on (product.id = attribute2.product_id and attribute.name = 'def') 

是不對的,用的產品,其中表?

而且也什麼attribute.name,你有名稱/別名屬性沒有表

+0

匿名失敗,修復 – Dani 2011-02-25 22:00:48

0

爲了使其工作必須更換第一與JOIN,類似這樣的:

SELECT attribute1.value AS a1, attribute2.value AS a2, products.id 
FROM attributes AS attribute1 ON (product.id = attribute1.product_id AND attribute.name = 'abc') 
LEFT JOIN attributes AS attribute2 ON (product.id = attribute2.product_id AND attribute.name = 'def') 
+0

這不會起作用a1是空的 – Dani 2011-02-25 21:59:14

+0

我想你提供了錯誤的SQL,其中「FROM產品」丟失。其他明智的你的查詢是有效的。對於無法找到值的LEFT JOIN,NULL值非常常見,您可以使用更爲嚴格的連接(如INNER或RIGHT)來獲得確切的結果。 – Nazariy 2011-02-25 22:04:19

1

幾個問題:

  1. 你缺少一個from子句開始查詢
  2. 您需要使用attribute.name測試的正確表別名,特別是attribute1.nameattribute2.name

試試這樣說:

select attribute1.value as a1, attribute2.value as a2, products.id 
    from products 
     left join attributes as attribute1 
      on products.id = attribute1.product_id 
       and attribute1.name = 'abc' 
     left join attributes as attribute2 
      on products.id = attribute2.product_id 
       and attribute2.name = 'def' 
+0

匿名失敗,修復 – Dani 2011-02-25 22:00:00

+0

@Dani:此查詢現在可以使用嗎? – 2011-02-25 22:04:34

+0

不,這是一個複製失敗 – Dani 2011-02-25 22:07:29