sql - 当我尝试连接两个表中的数据时,行丢失

标签 sql mysql

我尝试编写一个相当简单的查询。

如果我运行以下查询:

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_pa​​rts 行的 parts_id 与零件行的 id 相匹配.如果是这种情况,通过将 sp.parent_unit 显示为 ,执行左外连接将显示没有 serialized_pa​​rts 行来匹配它们的行空

关于sql - 当我尝试连接两个表中的数据时,行丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000488/

相关文章:

php - 仅将 csv 上传到 mysql 选定的列 - laravel

php - 这是重建给定用户 session 的正确方法吗?

sql - <> 和 != 之间的区别

sql - ORU-10027 : buffer overflow, 限制为 100000 字节

sql - 给定一个列名,我如何找到数据库中的哪些表包含该列?

sql - 我什么时候应该支持 JOIN 而不是单一属性中的属性访问?

java - 如何使用基于 Java 的配置使用 Hibernate 和 MySQL 自动生成表。

单击保存图标时 MySQL Workbench 崩溃

mysql - SQL 查询返回子类别内的所有类(class)

mysql - asp.net sql从多个表中选择数据