【问题标题】:combing two SELECT statements into a JOIN将两个 SELECT 语句组合成一个 JOIN
【发布时间】:2012-10-16 12:35:19
【问题描述】:

我有两个表:table_1:item_idname ... table_2:image_iditem_idurl

以下函数使用传入的“$name”检索项目的“urls”。我首先需要从 table_1 获取“item_id”以在查询中使用。我只需要从 table_2 返回“url”。

它目前运行良好,但我觉得它可以通过 JOIN 而不是两个单独的查询在一个查询中完成。我尝试过使用不同的 'JOIN' 来使其工作,但我似乎无法做到正确。

下面是两个查询现在的函数...

function get_items( $name ) {

    global $wpdb;

    $sql1 = "SELECT `item_id` FROM `table_1` WHERE `name` = '$name'";
    $results1 = $wpdb->get_var( $sql1 );

    $sql1 = "SELECT `url` FROM `table_2` WHERE `item_id` = '$results1'";
    $results2 = $wpdb->get_results( $sql1, ARRAY_A );

    return $results2;

}

这是我尝试实现的“JOIN”,但没有成功(我也将其切换并执行了“LEFT/RIGHT JOIN”,结果相同)...

$sql1 = "SELECT `table_2`.`url` 
         FROM `table_2` 
         INNER JOIN `table_1`
         ON `table_2`.`item_id` = `table_1`.`item_id`
         WHERE `table_1`.`item_id` = '$name'";

对结合这两个查询有什么建议吗?

【问题讨论】:

    标签: mysql database join


    【解决方案1】:

    您查询的问题是这个WHERE table_1.item_id = '$name',应该是name 而不是item_id

    SELECT  b.url
    FROM    table1 a
            INNER JOIN table2 b
                ON a.item_id = b.item_id
    WHERE   a.name = '$name'
    

    【讨论】:

    • 你的意思是a.name = '$name'
    • 哇!不敢相信我错过了。感谢您的帮助。
    【解决方案2】:
    select url from table_2 where item_id IN (select item_id from table_1 where name = $name )
    

    【讨论】:

    • 这可行,但不是一个很好的方法。加入会更快。
    • 可能是的.. 但我隐约记得在查询优化阶段的某处读到,嵌套被优化为内部连接,从而产生相同的性能。我同意即使那是真的,也有查询优化器的开销。
    猜你喜欢
    • 2018-07-09
    • 2012-05-19
    • 1970-01-01
    • 2011-10-11
    • 2013-05-31
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多