1

私はMysqlデータベースを持っています.2つのテーブルがあり、1つは2つのキー値があり、2つ目は1からNに関連しています.

最初のテーブルには常にデータがありますが、それに関連する 2 番目のテーブルにはデータがない場合があります。2番目のテーブルに何もない場合は、常に最初のテーブルからデータを返す必要があります。

私のクエリは次のとおりです。

select a.*, b.* FROM disp_ofer a, ofer_detl b 
WHERE 
a.esta_cod = 'Lelis' 
AND
a.disp_ofer_data = '2013-10-30 16:07:20'
AND 
b.disp_ofer_data = a.disp_ofer_data
AND
b.esta_cod = a.esta_cod 
4

4 に答える 4

2

結合構文を使用して、テーブルを結合します。

あなたの場合、LEFT JOIN。

select a.*, b.* FROM disp_ofer a
Left join ofer_detl b  
     on b.disp_ofer_data = a.disp_ofer_data and b.esta_cod = a.esta_cod
WHERE 
a.esta_cod = 'Lelis' 
AND
a.disp_ofer_data = '2013-10-30 16:07:20'
于 2013-11-01T13:07:02.600 に答える
1

ステートメントJOINに複数のテーブルをリストするのではなく、常に構文を使用してください。FROMそれはより良い習慣と考えられています。

ALEFT JOINはあなたがこの目標を達成できるようにします。NATURALキーワードが実行され、両方のテーブルに存在するすべての列が自動的に結合されます。

SELECT a.*, b.*
FROM disp_ofer a
NATURAL LEFT JOIN ofer_detl
WHERE a.esta_cod = 'Lelis' AND a.disp_ofer_data = '2013-10-30 16:07:20'
于 2013-11-01T13:17:27.810 に答える
0

コードへの回答からのクエリを入力してその主題を忘れるだけでなく、それを読んで理解することをお勧めします。結合は非常に理解しやすく、すべての Web 開発者が知っておくべき基本事項の一部です。この記事がお役に立てば幸いです。

以下は、私のバージョンのクエリです。

SELECT do.*, od.*
FROM disp_ofer do
LEFT JOIN ofer_detl od USING(ofer_data, esta_cod)
WHERE 
    do.esta_cod = 'Lelis' 
    AND do.disp_ofer_data = '2013-10-30 16:07:20'
于 2013-11-01T13:30:57.020 に答える
0
select a.*, b.* 
FROM disp_ofer a
LEFT OUTER JOIN ofer_detl b ON (b.esta_cod = a.esta_cod AND b.disp_ofer_data = a.disp_ofer_data)
WHERE 
a.esta_cod = 'Lelis' 
AND
a.disp_ofer_data = '2013-10-30 16:07:20'
于 2013-11-01T13:07:21.597 に答える