1

2 つのクエリで次のことを実行できますが、より簡単にしたいと考えています。これを 1 つのクエリに組み合わせることができますか? もしそうなら、1 つに対して 2 つのクエリを実行するよりも効率的ですか?

query1: SELECT page_id, coupon_id from table_1 WHERE key = :key
query2: SELECT folder from table_2 WHERE page_id = table_1.page_id

最終的な結果を得るには、table_1 からの Coupon_id と、table_2 からのフォルダーが必要です。

query2 では、query1 の page_id の結果を使用してフォルダーを取得する必要があります

これを行う簡単な方法はありますか?

4

5 に答える 5

3

JOIN ( LEFTRIGHTまたは必要に応じて) を使用INNERします。

SELECT 
    t1.page_id, 
    t1.coupon_id,
    t2.folder
FROM
    table_1 AS t1
    LEFT JOIN table_2 AS t2 ON
        t2.page_id = t1.page_id
WHERE
    t1.key = :key 
于 2013-01-17T20:37:54.893 に答える
2

JOIN次のテーブルが必要になりますpage_id

SELECT t1.page_id, 
    t1.coupon_id, 
    t2.folder
from table_1 t1
inner join table_2 t2
    on t1.page_id = t2.page_id
WHERE key = :key

結合構文を学習するのに助けが必要な場合は、 join の優れた視覚的な説明をご覧ください。

INNER JOIN2 つのテーブル間で一致するすべての行を返すを使用しました。table_1 に一致する行がない場合でもからすべての行を返したい場合table_2は、LEFT JOIN

于 2013-01-17T20:38:23.203 に答える
0
SELECT
  table_1.coupon_id AS coupon_id,
  table_2.folder AS folder
FROM
  table_1
  INNER JOIN table_2 ON table_2.page_id = table_1.page_id
WHERE
  table_1.key = :key
于 2013-01-17T20:38:42.847 に答える
0
SELECT t1.page_id, t1.coupon_id, t2.folder
FROM table_1 t1 LEFT JOIN table_2 t2 ON (t1.page_id = t2.page_id)
WHERE t1.key = :key

これは 2 つのクエリよりも高速ですが、データによって異なります。

于 2013-01-17T20:39:03.253 に答える
0

これを試してください:

SELECT a.page_id, a.coupon_id, b.folder_id 
from table_1 a
join table_2 b
ON a.page_id = b.page_id
WHERE a.key = :key
group by a.page_id
;
于 2013-01-17T20:39:18.533 に答える