我通常不会发帖求助,但我真的被困在这里,因为我的SQL知识不是很好。
这就是我想要做的。 我有两张桌子:
CREATE TABLE DistinctCategories (
name VARCHAR(20) PRIMARY KEY,
check INT);
CREATE TABLE Categories (
_id INTEGER PRIMARY KEY,
tid INTEGER NOT NULL,
name VARCHAR(20) NOT NULL,
check INTEGER NOT NULL
);
我想为特定的tid创建所有可能类别名称的列表。如果两个表中都有一个名称,我只希望它列出一次,该行将采用类别中的“检查”值。
我在考虑以下几点:
Select *,
From Categories,
Where tid=2
然后在这里添加联接,但我不确定它是如何工作的。
这甚至可能吗?
答案 0 :(得分:0)
您可以像这样使用左外连接
Select C.id, C.tid, C.name, C.check
from Categories as C LEFT JOIN DistinctCategories as DC
ON C.name=DC.name
where C.tid=2
我没有得到你想要显示哪个支票,c.check和dc.check是否有外键关系?
答案 1 :(得分:0)
SELECT name, check
FROM Categories
WHERE tid = ?
UNION ALL
SELECT name, check
FROM DistinctCategories
WHERE name NOT IN (SELECT name FROM Categories WHERE tid = ?)
答案 2 :(得分:0)
我怀疑是否有人遇到同样的问题,但我的解决方案最终成为以下内容:
Select *
From Categories
Where tid=1
UNION
Select *
From Categories
Where Check=0 AND
NOT IN (Select Name
FROM Categories
Where tid=1)
Order By Name