我有一个相当简单的查询,我试着写.
如果我运行以下查询:
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,所以也许我只是做错了.那说我猜它只是一个简单的错误.如果您需要样本数据,请告诉我,我会发布一些.谢谢.
要确保它与没有连接的行数相同,请使用左外连接.
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_unit为NULL.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |