仅在满足特定条件时才连接表

mph*_*mph 3 sql sqlite

我正在尝试编写一个只在满足某个条件时才执行JOIN的SQLite查询(items.super = 1).我知道我可以在我的应用程序中编写一些代码,以确定是否超级== 1然后执行正确的查询,但我更倾向于只有一个查询在两种情况下都有效 - 无论super是0还是1.

SELECT i2.id, i2.name
FROM items i
JOIN items i2 ON i.subcategory_id = i2.subcategory_id AND i.super = 1
WHERE i.id = ?
Run Code Online (Sandbox Code Playgroud)

上面,我试图在我的JOIN子句中添加第二个条件,但是当i.super == 0时这不起作用.我应该用两个左连接和coalesce()函数这样的东西解决这个问题吗?

谢谢.

Ric*_*iwi 6

这就是我读这个问题的方法.

您想要显示项目中的记录,WHERE过滤器应用于项目.
但是,有时当前项目的超级= 1,您希望显示所有兄弟项目而不是相同的子类别.

在这种情况下,您可以使用此查询

SELECT i2.id, i2.name
FROM items i
INNER JOIN items i2 ON
    (i.super = 0 and i2.id = i.id)
    OR
    (i.super = 1 and i.subcategory_id = i2.subcategory_id)
WHERE i.id = ?
Run Code Online (Sandbox Code Playgroud)