0

私は通常、助けを求めて投稿することはありませんが、SQL の知識があまりないため、ここで立ち往生しています。

これが私がやりたいことです。私は2つのテーブルを持っています:

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

UNION ALLおよびNOT 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 *
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

このように左外部結合を使用できます

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 に答える