2010-12-16 9 views
-1

は以下の表を考えてみましょう:同じフィールド上で異なる条件でMySQLにテーブルを結合しますか?

account => ID, Login, Pass, Email, Level, IDNum, Name 
records => RID, Status, IDNum, Reason, Type, Amount, Date, SubmitterID 

は今、私は次のクエリでテーブルを結合します。Nameフィールド上のクエリで

SELECT account.Name FROM account, records WHERE records.IDNum = account.IDNum 

は、私が欲しいしかし場合は、IDNUMのマッチングに基づいて参加されるだろう名前フィールドWHERE account.ID = records.IDと同時にWHERE records.IDNum = account.IDNumを取得することは可能でしょうか?一つに、以下の2つのクエリを結ぶ短いにおける

質問:だから、明らかに

alt text

SELECT account.Name FROM account, records WHERE records.IDNum = account.IDNum 
SELECT account.Name FROM account, records WHERE records.SubmitterID = account.ID 

私はおそらく十分に明確ではないよ、下の例のデータを確認してください最初のクエリのNameフィールドはJohnを返し、2番目のクエリに対してChrisを返します。私はの両方の名前を1つのクエリで表示したいと考えています。

+0

私はこのMySQLのバージョンを持っていますが、私のような「参加」をしようとすると、私の5.0は信じられません。 – Bobby

+0

@Bobby:申し訳ありませんが、私の質問を修正しました。私はMySQL 5.0.91を持っています。 – user435216

答えて

1

あなたが実際にEVERY行をjoingingして、あなたがしたいだけ1を保持するフィルタリングされています。

select account.Name 
FROM account 
    INNER JOIN records ON (records.IDNum = account.IDNum AND records.SubmitterID = account.ID)

EDIT::OPの質問の編集によって

あなたが必要と上記JOINORの代わりAND思えるあなたは代わりに参加し、右でそれらをフィルタリングする必要があります。したがって:

select account.Name 
FROM account 
    INNER JOIN records ON (records.IDNum = account.IDNum OR records.SubmitterID = account.ID)

EDIT 2:フォローアップ

create table account (id int, IDNum int, Name char(5)); 
insert into account values (1, 12345, 'John'), (2, NULL, 'Chris'); 
create table records (RID int, IDNum int, SubmitterID int); 
insert into records values (1, 12345, 2); 
select account.Name 
FROM account 
    INNER JOIN records ON (records.IDNum = account.IDNum OR records.SubmitterID = account.ID); 

利回り(MySQLの5.1.46で)OPでコメントするには:

+-------+ 
| Name | 
+-------+ 
| John | 
| Chris | 
+-------+

EDIT 3:OPでは2番目のコメント:

このような何か?

select account.Name as byIDNum, NULL bySubmitterID 
from account 
    inner join records USING (IDNum) 
union 
select NULL, account.Name 
from account 
    inner join records ON (records.SubmitterID = account.ID);
+0

編集していただきありがとうございます。しかし、これは、 'records.IDNum = account.IDNum'か' records.SubmitterID = account.ID'のいずれかである場合にのみ、名前フィールドに1つの(単一の)値を返します。私は両方の名前フィールドを同時に使用する必要があります。これは本当に奇妙に見えますか? – user435216

+0

@ user435216:申し訳ありませんが、MySQLのバージョンで同じ結果が得られません。 – Danosaure

+0

ありがとう、本当にあなたの助けに感謝します。第1と第2のフィルターの結果を2つの異なる列に保存できますか?エイリアスの作成などそして私は貧しい私の英語のために本当に申し訳なく、私の質問を最初に明確に説明できませんでした。 – user435216

0

私は誤解しているかもしれませんが、簡単なものではなく、必要なものを達成しますか?

SELECT account.name 
FROM account, records 
WHERE records.IDNum = account.IDNum 
AND records.SubmitterID = account.id 

それとも、これらのルールのいずれかに該当する場所を返す取得したい場合:

SELECT account.name 
FROM account, records 
WHERE records.IDNum = account.IDNum 
OR records.SubmitterID = account.id 
+0

私の質問ではっきりしないと申し訳ありませんが、私の更新された質問を確認してください。ありがとう。 – user435216

関連する問題