0

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

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

这甚至可能吗?

4

3 回答 3

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
于 2012-09-26T03:42:51.050 回答
0

查看UNION ALLandNOT 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 = ?)
于 2012-09-25T14:17:50.187 回答
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 是否有外键关系?

于 2012-09-25T14:12:46.163 回答