2016-05-15 25 views
-2

私は2つのテーブルall_jobsとjobs_appliedを持っています。問題は、私はall_jobsテーブルからジョブのリストを取得したいです。現時点では、私はこのクエリを持っていますが、それは私に両方のテーブルから共通のレコードを与えるだけです。MySql:2つのテーブルを結合して共通データを取得しない

SELECT b.uid 
    , a.jobtitle 
    , a.job_id 

    FROM job_posting a 
    left 
    join job_applied b 
    on a.job_id = b.job_id 
Where b.uid != 10 and disable=0 and draft =0 

誰でもこのことについて助言できますか?

おかげ

編集:その不明確なら、私に教えてください。私はより良い説明をしようとします。

のjob_postingテーブルには24個のレコードがあります。 job_appliedテーブルには2つのレコードがあります。どちらの表にもjob_idフィールドがあります。私は2つのテーブルに共通の1つのレコードがあるため、私は23レコードを期待しているクエリを実行すると、しかし、私は単一のレコードを取得しています。

この質問を確認しました。 What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?しかし、私は自分の状況でどのように使用することができますか分かりません。

EDIT2:

job_id, 
title, 
skills, 
post_date 

をjob_posting表構造

は私が達成するために何をしようとしています

id, 
job_id, 
uid, 
apply_date 

をjob_applied。 job_postingテーブルからレコードのリストを取得したいが、これらのレコードはjob_appliedテーブルに特定のuidで存在してはいけません。だから、私はどこに2つのものを追加しなければならないということを意味します.1つはuidの節、もう1つはjob_idです。

以下のクエリも試しましたが、0個のレコードが返されています。

SELECT 
      a.jobtitle 
     , a.job_id 

     FROM job_posting a 
     left 
     join job_applied b 
     on a.job_id = b.job_id 
Where (b.job_id is null and a.disable=0 and a.draft =0 and b.uid !=10) 

EDIT3:

私は今、このクエリを使用していますし、それが正しい結果を返しています。

Select a.jobtitle, a.job_id from job_posting a where 
a.job_id not in (select b.job_id from job_applied b WHERE b.uid=1) 
AND a.disable=0 AND a.draft =0 

私は何か間違っているかどうか教えてください。

+0

よくあることはわかりません。結果の例と期待される結果を表示できますか? –

+0

テーブルjob_postingはどのようにall_jobsに関係していますか? –

+0

私は質問を更新しました。 – Ironic

答えて

1

左外部結合を試しましたか?私はあなたが使用している参加は共通の結果しか表示しないと思います。

+0

私は共通のものを探していません。私はjob_postingから探していて、それらは共通ではないことを記録しています。 – Ironic

+0

はい、左外部結合です。 http://i.stack.imgur.com/qje6o.png列1行2 – Strainger

+0

"where"の後のSQL文の末尾に "b.uid IS NULL"があります – Strainger

1

すべてのコメントの後、私はb.uidが一部のユーザーテーブルへの参照であることを理解しました。したがって、job_appliedは多対多関係の一種の関連表です。あなたのクエリがそのようになっているはず思える:

SELECT a.jobtitle, a.job_id 
FROM job_posting a 
WHERE a.disable=0 AND a.draft =0 
AND job_id NOT IN (
SELECT job_id FROM job_applied b 
WHERE b.uid = 1) 

これはこれは、手順か何かにいくつかのパラメータを介して提供されなければならない1 = uidを持つユーザーのためのテーブルbからマッチした行を削除します。

私はあなたにテストのためのフィドルを用意しました:http://sqlfiddle.com/#!9/91792/7/0 それが役立つかどうか教えてください。

+0

私はそれを試みましたが、それはしませんでした任意のレコードを返します。投票されました – Ironic

+0

通常は、左の結合で不一致の行がNULLで満たされているために発生しません。私は条件b.uidを削除するだけでなく、b.uidがnullになると思う。 –

+0

where節でチェックされたすべての列にエイリアスを追加できますか? (例えば無効にする) –

1

のjob_postingテーブルには24個のレコードがあります。 job_appliedテーブルの は2レコードです。どちらの表にもjob_idフィールドがあります。私は、クエリ を実行したとき、私は上の記録にもかかわらず、一つのレコードは左がそのテーブル(条件に一致)上のすべてのレコードを返す必要がありますjob_postingに参加

は、私が思う、両方のテーブルで共通であるため、23件のレコードを期待しています別のテーブルは2つ以上のテーブルに関連しています。条件のために結果に23レコードが表示されていることを確認してください。

Where b.uid != 10 and disable=0 and draft =0 
+0

私はシングルレコードを取得しています。 – Ironic

関連する問題