一个查询中有多个select语句

时间:2013-01-17 20:35:45

标签: php mysql pdo

我可以在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结果来获取文件夹

有更简单的方法吗?

5 个答案:

答案 0 :(得分:3)

使用JOINLEFTRIGHTINNER符合您的需求):

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 

答案 1 :(得分: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

如果您需要帮助学习联接语法,这里有一个很棒的visual explanation of joins

我使用了INNER JOIN,它将返回两个表之间匹配的所有行。如果要从table_1返回所有行 即使它在table_2中没有匹配的行,那么您也可以使用LEFT JOIN

答案 2 :(得分: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

答案 3 :(得分: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

这将比两个查询更快,多少取决于您的数据。

答案 4 :(得分: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
;