Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何为已编写的子查询编写联接查询?_Mysql_Sql_Performance - Fatal编程技术网

Mysql 如何为已编写的子查询编写联接查询?

Mysql 如何为已编写的子查询编写联接查询?,mysql,sql,performance,Mysql,Sql,Performance,你好,朋友们,我在加入查询中有一些混乱,所以对于相同的问题,我已经编写了子查询。 我的数据库设计如下:table name=dbtest 我想要根据谁与谁相关的输出 假设如果我输入id=4,它应该返回xyz=>kbc 通过子查询到目前为止我所实现的是kbc唯一的 我的子查询是:selectname fromtdbtest,其中id=selectrelationfromtdbtest,其中id='3' 任何好友都可以帮助我使用joinquery获得所需的输出吗 select d.name,d.id

你好,朋友们,我在加入查询中有一些混乱,所以对于相同的问题,我已经编写了子查询。 我的数据库设计如下:table name=dbtest

我想要根据谁与谁相关的输出

假设如果我输入id=4,它应该返回xyz=>kbc

通过子查询到目前为止我所实现的是kbc唯一的 我的子查询是:selectname fromtdbtest,其中id=selectrelationfromtdbtest,其中id='3'

任何好友都可以帮助我使用joinquery获得所需的输出吗

select d.name,d.id,db.relation from dbtest d, dbtest db where d.id = db.relation;
这是自连接。。。希望能有帮助

select name
from dbtest
where id = (
  select relation
  from dbtest
  where id = '3'
);
这是自连接。。。希望能有帮助

select name
from dbtest
where id = (
  select relation
  from dbtest
  where id = '3'
);
你的相当于s是内部选择,r是外部选择

select r.name
from dbtest s
join dbtest r
  on r.id = s.relation
where s.id = '3'
你的相当于s是内部选择,r是外部选择

select r.name
from dbtest s
join dbtest r
  on r.id = s.relation
where s.id = '3'
试试这个:

select a.id,a.name,b.name,b.relation 
from dbtest a,dbtest b where a.id=b.relation
试试这个:

select a.id,a.name,b.name,b.relation 
from dbtest a,dbtest b where a.id=b.relation

我通过以下查询获得了关系xyz=>kbc:

SELECT a.name, b.name from dbtest a, dbtest b where a.id = 4 and a.relation = b.id
编辑:这是使用联接的同一查询

SELECT a.name, b.name FROM dbtest a JOIN dbtest b ON a.relation = b.id WHERE a.id = 4

我通过以下查询获得了关系xyz=>kbc:

SELECT a.name, b.name from dbtest a, dbtest b where a.id = 4 and a.relation = b.id
编辑:这是使用联接的同一查询

SELECT a.name, b.name FROM dbtest a JOIN dbtest b ON a.relation = b.id WHERE a.id = 4


@menomore:是的,它只返回bbc,但我希望kbc与bbc相关。你明白我在做什么吗?@menomore:是的,它只返回bbc,但我希望kbc与bbc相关。你明白我在做什么吗?哪一个更有效?@RPM I/O方面,它们应该是相同的。就速度而言,它们应该几乎相同。唯一的区别是解析器和执行器采用哪种代码分支。我喜欢第一个查询的方式looks@RPMOP请求一个基于连接的查询,所以这里我给出了哪一个更有效?@RPM I/O-wise,它们应该是相同的。就速度而言,它们应该几乎相同。唯一的区别是解析器和执行器采用哪种代码分支。我喜欢第一个查询的方式looks@RPMOP要求一个基于连接的查询,所以这里我给出了一个C'mon,逗号连接不好。另外,你的b.id是无限的。拜托,逗号连接不好。另外,你的b.id是无限的。拜托,逗号连接不好。嗨,简·德沃夏克,你能解释一下为什么它不好吗?我一直在使用它,直到现在,我想知道它是否有任何弱点。谢谢逗号联接没有ON子句。你必须把它加入WHERE子句。这使得它更容易忘记,而且是非语义的。此外,逗号联接比显式联接具有更高的优先级,并且逗号左联接没有标准语法。@christianhs:我们可以使用联接来实现更好的性能吗?@Keturshah从技术上讲,逗号联接是一种联接。这更难看。拜托,逗号连接不好嗨,简·德沃夏克,你能解释一下为什么它不好吗?我一直在使用它,直到现在,我想知道它是否有任何弱点。谢谢逗号联接没有ON子句。你必须把它加入WHERE子句。这使得它更容易忘记,而且是非语义的。此外,逗号联接比显式联接具有更高的优先级,并且逗号左联接没有标准语法。@christianhs:我们可以使用联接来实现更好的性能吗?@Keturshah从技术上讲,逗号联接是一种联接。这更难看。拜托,逗号连接不好拜托,逗号连接不好