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 ( LEFT,RIGHTINNER取决于您的需要):

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

如果您在学习连接语法方面需要帮助,这里有一个关于连接的可视化解释

我使用了INNER JOIN将返回两个表之间匹配的所有行。如果您想返回所有行,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

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

于 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 回答