复杂 MySQL 左连接查询
Complex MySQL left join query
我正在尝试编写更多 complex/better mysql 语句,但是我在使用逻辑创建语句时遇到了一些问题,并且我不完全确定如何去做。感谢您的帮助!
基本上我的目标是 Select 全部来自产品 table,然后为每个产品加入一个图像,其中显示 = 1
"SELECT p
FROM CurbbedUserBundle:Product p
LEFT JOIN CurbbedUserBundle:ProductImages i
ON p.id = i.id
WHERE i.display = 1
ORDER BY p.name ASC"
感谢您的帮助!
如果你想要一个 left join
,那么第二个 table 上的所有条件都应该在 on
子句中。您需要将 where
中的条件移动到 on
:
SELECT p
FROM CurbbedUserBundle:Product p LEFT JOIN
CurbbedUserBundle:ProductImages i
ON p.id = i.id AND i.display = 1
ORDER BY p.name ASC
编辑:
左连接的规则是它保留第一个 table 中的所有行,无论 on
条件是否为真。因此,如果您想按第一个 table 进行过滤,请将条件放在 where
子句中。它不会在 on
中执行任何操作。 right join
的规则正好相反。
我正在尝试编写更多 complex/better mysql 语句,但是我在使用逻辑创建语句时遇到了一些问题,并且我不完全确定如何去做。感谢您的帮助!
基本上我的目标是 Select 全部来自产品 table,然后为每个产品加入一个图像,其中显示 = 1
"SELECT p
FROM CurbbedUserBundle:Product p
LEFT JOIN CurbbedUserBundle:ProductImages i
ON p.id = i.id
WHERE i.display = 1
ORDER BY p.name ASC"
感谢您的帮助!
如果你想要一个 left join
,那么第二个 table 上的所有条件都应该在 on
子句中。您需要将 where
中的条件移动到 on
:
SELECT p
FROM CurbbedUserBundle:Product p LEFT JOIN
CurbbedUserBundle:ProductImages i
ON p.id = i.id AND i.display = 1
ORDER BY p.name ASC
编辑:
左连接的规则是它保留第一个 table 中的所有行,无论 on
条件是否为真。因此,如果您想按第一个 table 进行过滤,请将条件放在 where
子句中。它不会在 on
中执行任何操作。 right join
的规则正好相反。