-4

それぞれが field を持つ 3 つのテーブルがあるとしますfoo。次のレコードを取得するにはどうすればよいですか。

  1. 3 つのテーブルすべてに foo の値が存在するすべてのレコード?
  2. foo の値が 2 つのテーブルに存在するすべてのレコード?
  3. foo の値が存在するすべてのレコードが 1 つのテーブルにのみ存在するか?

fooユニークです。

#1の私の試み:

SELECT a.foo
FROM   a
WHERE  a.foo IN (SELECT b.foo
                 FROM   b
                 WHERE  b.foo IN (SELECT c.foo
                                  FROM   c)) 

#2については、#1と同様のことをする必要があると思いますが、一度に2つのテーブル{a、b}、{b、c}、{a、c}の場合、それをUNIONしますか?わからない。

#3については、手がかりがありません。

更新: サンプルデータ

Table1
 - foo-a
 - foo-b
 - foo-c

Table2
 - foo-a
 - foo-b

Table3
 - foo-a
 - foo-c
 - foo-d

#1 の質問では、3 つのテーブルすべてに 1 つのレコードが存在します: foo-a。#2 の質問では、2 つのテーブルに存在する 2 つのレコードがあります: foo-b (Table1 と Table2 内) と foo-c (Table1 と Table3 内)。#3 の質問では、1 つのテーブルにのみ存在するレコードが 1 つあります: foo-d。

4

3 に答える 3

4

FOOユニークなので、

1番は、

SELECT Foo
FROM
    (
        SELECT Foo FROM table1
        UNION ALL
        SELECT Foo FROM table2
        UNION ALL
        SELECT Foo FROM table3
    ) a
GROUP BY Foo
HAVING COUNT(*) = 3

No.2については、

SELECT Foo
FROM
    (
        SELECT Foo FROM table1
        UNION ALL
        SELECT Foo FROM table2
        UNION ALL
        SELECT Foo FROM table3
    ) a
GROUP BY Foo
HAVING COUNT(*) = 2

No.3については、

SELECT Foo
FROM
    (
        SELECT Foo FROM table1
        UNION ALL
        SELECT Foo FROM table2
        UNION ALL
        SELECT Foo FROM table3
    ) a
GROUP BY Foo
HAVING COUNT(*) = 1
于 2012-11-01T10:45:29.300 に答える
2

これを試してください: の値が 1 の場合、値Contは 1 つのテーブルにのみ存在し、値が 2 の場合、2 つのテーブルに存在します。

SELECT foo, COUNT(1) Cont
  FROM 
  (
  SELECT foo
    FROM  a
    UNION
  SELECT foo
    FROM  b
    UNION
 SELECT foo
    FROM  c 
  ) a
  GROUP BY foo
  --   HAVING COUNT(1) = 1 -- 2 FOR EXISTING IN TWO TABLES, 3 FOR EXISTING IN ALL TABLES
于 2012-11-01T10:44:35.183 に答える
0

カウントを持つすべてのアイテムを取得できる単一の SQL の場合、または必要に応じて (HAVING 句を使用して) 個々のアイテムを取得できます。

SELECT a.foo, COUNT(*)
FROM (SELECT foo
FROM  a
UNION
SELECT foo
FROM  b
UNION
SELECT foo
FROM  c) AS z
LEFT OUTER JOIN a ON a.foo = z.foo
LEFT OUTER JOIN b ON b.foo = z.foo
LEFT OUTER JOIN c ON c.foo = z.foo
GROUP BY z.foo
于 2012-11-01T11:23:08.223 に答える