从两个表生成唯一值列表,其中包含一个表中的所有列

时间:2012-09-25 13:45:21

标签: sqlite

我通常不会发帖求助,但我真的被困在这里,因为我的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

然后在这里添加联接,但我不确定它是如何工作的。

这甚至可能吗?

3 个答案:

答案 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)

查看UNION ALLNOT IN运营商:

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