我有2个表,我试图以特定方式组合 表1:'part_defs'表2 Items_part_values
value_defs中的ID | Name
-------------
1 | color
2 | size
3 | weight
Items_part_values 中的ItemID | valueID | Value
-------------------------
10 | 1 | red
11 | 1 | blue
我需要的是一个查询,对于给定项目,value_defs中的所有行都会出现,如果它们在Items_part_values中有值,则为该值。
因此对于第11项我想要
ID | Name | Value
--------------------
1 | color | red
2 | size | NULL
3 | weight | NULL
我是MySQL新手,在访问中我会创建一个以ItemID作为参数的子查询,然后在结果上使用value_defs进行左连接。
有没有办法在MySQL中做类似的事情?
由于
答案 0 :(得分:0)
使用left join:
SELECT * FROM Table1 LEFT JOIN Table2 USING (ID);
编辑:
SELECT * FROM part_defs LEFT JOIN Items_part_values ON part_defs.ID = Items_part_values.valueID;
答案 1 :(得分:0)
使用:
SELECT p.id,
p.name,
ipv.value
FROM PART_DEFS p
LEFT JOIN ITEMS_PART_VALUES ipv ON ipv.valueid = p.id
AND ipv.itemid = ?
替换“?”使用您要搜索的itemid
这意味着将返回所有PARTS_DEF
行,如果ITEMS_PART_VALUES.valueid
与PART_DEFS.id
值匹配,则会为您要查找的项目显示ITEMS_PART_VALUES.value
值。如果没有匹配,则该列的值列将为NULL。
在JOIN与WHERE子句中指定条件时,OUTER JOIN有所不同。在JOIN中,在 JOIN发生之前应用条件,而在WHERE
子句中, JOIN之后应用条件