2016-09-28 12 views
0

SQLに2つのテーブルがあります。SQLテーブル2の欠損値を見つけている2つのテーブルのクエリ

- 表1-

  • ID

- 表2-

  • ID

  • プログラム

表1は、各社ごとに1つのレコードしか保持していません。表2には、表1のレコードに対する複数の項目があります。したがって、ID = IDで2つの表を結合して、0〜7の結果を得ることができます。私は特定のプログラムではないが、他のプログラムに参加することができるテーブル1の会社を探している2つのテーブルを照会する必要があります。私はこれが簡単だと知っていますが、私はそれを私のために働かせることはできません。

+1

あなたはあまり抽象的な名前を使用して、テーブルのためのいくつかのサンプルデータ&望ましい結果を共有していただけますか?私はあなたがしようとしていることに従うことができません。 – Siyual

+0

私は彼の入力で特定のプログラムを考えています。\ – Naidu

+0

参加した後はどこの条件。 table2.programがprogramと等しくない場合は、ID – Naidu

答えて

0
SELECT t1.Name 
    FROM Table1 t1 
LEFT JOIN 
     Table2 t2 
    ON t1.id = t2.id 
WHERE t2.program IS NULL; 
+0

t2にはプログラムがある名前フィールドはありません。しかし、これはあなたに、会社のテーブルと一致しない会社のIDを持つ登録簿を得るでしょう。これは尋ねられているものの反対です。 – Matt

+0

今、それはあなたが次の編集に行く時までに、おそらく私の答えがあるでしょう – Matt

1
SELECT * 
FROM 
    Table1 t1 
    LEFT JOIN Table2 t2 
    ON t1.id = t2.id 
    AND t2.program = 'asdf' 
WHERE 
    t2.id IS NULL 

ちょうど場所に参加を条件に、プログラムの要件を外部結合を使用して、表2のレコードが存在しない場合、次に言います。

これは少し曖昧にしようとし、あなたの特定の企業やプログラムへの適応:

SELECT * 
FROm 
    Companies c 
    LEFT JOIN Programs p 
    ON c.Id = p.CompanyId 
    AND p.Program = 'some title' 
WHERE 
    p.Program IS NULL 

はなく、メソッドが存在する:

SELECT * 
FROM 
    Companies c 
WHERE 
    NOT EXISTS (SELECT 1 
      FROM Programs p 
      WHERE 
       p.CompanyId = c.Id 
       AND p.Program = 'some title') 

を私が方法ではありませんが表示されません。私はそれを一般的にはお勧めしないからです。

+0

これは私が探していたもののために働いたすべてのプログラムに登録されていない企業を取得します。ありがとう。 – Jayson

+0

@Jayson喜んでこれがあなたに役立ちました。喜んで助けてください。あなたの問題が世話をされ、評判ポイントが割り当てられていることを他の人が助けてくれたら、私の回答を受け入れることを検討してください。ありがとう! http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt

0

クエリに指定したプログラムのどこに会社を置いておきたいですか?これは私が思い付いたものです:

select t1.* 
from Table1 t1 
left join Table2 t2 on t1.ID = t2.ID 
where coalesce(t2.Program, '') <> 'Name of Program' 

または

where coalesce(t2.Program, '') not in (<comma-delimited list of programs>) 
関連する問題