Mysql 将两个SELECT语句合并为一个联接

Mysql 将两个SELECT语句合并为一个联接,mysql,database,join,Mysql,Database,Join,我有两个表:表1:item\u id,name。。。表2:image\u id,item\u id,url 以下函数检索传入的带有“$name”的项的“URL”。我首先需要从表_1中获取要在查询中使用的“item_id”。我只需要从表2中返回“url” 它目前运行得很好,但我觉得可以简化为在一个查询中使用连接而不是两个单独的查询。我尝试过使用不同的“加入”来让它工作,但我似乎无法正确地进行 下面是现在的函数和两个查询 function get_items( $name ) { glob

我有两个表:表1:
item\u id
name
。。。表2:
image\u id
item\u id
url

以下函数检索传入的带有“$name”的项的“URL”。我首先需要从表_1中获取要在查询中使用的“item_id”。我只需要从表2中返回“url”

它目前运行得很好,但我觉得可以简化为在一个查询中使用连接而不是两个单独的查询。我尝试过使用不同的“加入”来让它工作,但我似乎无法正确地进行

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

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;

}
这是我尝试实现的“连接”,但没有成功(我也改变了它,做了一个“左/右连接”,也得到了相同的结果)


关于组合这两个查询有什么建议吗?

您的查询的问题是
表1.item\u id='$name'
,它应该是
名称
而不是
item\u 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'
?哇!真不敢相信我错过了。谢谢你的帮助。
SELECT  b.url
FROM    table1 a
        INNER JOIN table2 b
            ON a.item_id = b.item_id
WHERE   a.name = '$name'
select url from table_2 where item_id IN (select item_id from table_1 where name = $name )