Mysql 将两个SELECT语句合并为一个联接
我有两个表:表1: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
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 )