我尝试编写一个相当简单的查询。
如果我运行以下查询:
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;
我得到了我希望返回的所有行。现在,当我尝试使用以下查询从另一个表中获取 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
在过去,我从未真正在查询中处理过 OR,所以也许我只是做错了。也就是说,我猜这只是一个简单的错误。如果您需要示例数据,请告诉我,我会发布一些。谢谢。
最佳答案
要确保它具有与没有连接时相同的行数,请使用左外部连接。
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
默认的联接类型是内部联接。在内部联接中,如果表 A 和表 B 中的联接字段不匹配,则表 A 和表 B 的内容都不会显示。最可能的情况是,对于零件表中的六行,没有 serilized_parts
行的 parts_id
与零件行的 id
相匹配.如果是这种情况,通过将 sp.parent_unit
显示为 ,执行左外连接将显示没有
。serialized_parts
行来匹配它们的行空
关于sql - 当我尝试连接两个表中的数据时,行丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000488/