当我尝试从两个表连接数据时,行丢失

blc*_*llo 0 mysql sql

我有一个相当简单的查询,我试着写.

如果我运行以下查询:

SELECT parts.id, parts.type_id 
FROM parts 
WHERE parts.type_id=1 
  OR parts.type_id=2 
  OR parts.type_id=4 
ORDER BY parts.type_id;
Run Code Online (Sandbox Code Playgroud)

我得到了我希望返回的所有行.现在,当我尝试使用以下查询从另一个表中获取parent_unit时,六行突然退出结果:

SELECT parts.id, parts.type_id, sp.parent_unit 
FROM parts, serialized_parts sp 
WHERE (parts.type_id=1 OR parts.type_id=2 OR parts.type_id=4) 
  AND sp.parts_id = parts.id 
ORDER BY parts.type_id
Run Code Online (Sandbox Code Playgroud)

在过去,我从来没有在我的查询中真正处理OR,所以也许我只是做错了.那说我猜它只是一个简单的错误.如果您需要样本数据,请告诉我,我会发布一些.谢谢.

Ben*_*kin 5

要确保它与没有连接的行数相同,请使用左外连接.

http://dev.mysql.com/doc/refman/5.0/en/join.html

例如:

SELECT parts.id, parts.type_id, sp.parent_unit 
FROM parts
LEFT JOIN serialized_parts sp 
ON sp.parts_id = parts.id
WHERE (parts.type_id=1 OR parts.type_id=2 OR parts.type_id=4)
ORDER BY parts.type_id
Run Code Online (Sandbox Code Playgroud)

默认的连接类型是内连接.上的内连接,如果没有表A接合的字段和表B,表既不A和表B的内容之间的匹配将被显示.最可能的情况是,对于零件表中的六行,没有serilized_parts一行具有parts_id与零件行匹配的行id.如果是这种情况,执行左外连接将显示没有serialized_parts行匹配的行,方法是显示sp.parent_unitNULL.