2011-02-25 62 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