相关疑难解决方法(0)

在多个连接中放置'on'条件哪里更好?(MySQL的)

我有多个连接,包括mysql中的左连接.有两种方法可以做到这一点.

  1. 我可以在每次加入后立即设置"ON"条件:

    select*from A join B ON(A.bid = B.ID)join C ON(B.cid = C.ID)join D ON(c.did = D.ID)

  2. 我可以将它们全部放在一个"ON"子句中:

    select*from A join B join C join D ON(A.bid = B.ID AND B.cid = C.ID AND c.did = D.ID)

哪种方式更好?

如果我在查询中需要左连接右连接,它是否不同?

mysql join on-clause

3
推荐指数
1
解决办法
960
查看次数

ANSI和非ANSI联接之间有什么区别,您推荐哪些?

我访问过许多网站,找到关于哪个更好的答案,即ANSI或非ANSI语法。这两个查询有什么区别?

select a.name,a.empno,b.loc
from tab a, tab b
where a.deptno=b.deptno(+);
Run Code Online (Sandbox Code Playgroud)

和:

select a.name,a.empno,b.loc
from tab a 
left outer join tab b on a.deptno=b.deptno;
Run Code Online (Sandbox Code Playgroud)

在两种情况下结果都是相同的。第二个查询也更长。哪一个更好?

假设是否基于需要连接它们的条件在上面的查询中添加了另一个表Salgrade?..谁能假设一张桌子并给我解释

sql oracle join

3
推荐指数
1
解决办法
2万
查看次数

为什么我们在LEFT JOIN中有OUTER子句?

下面两个查询之间有什么区别

UPDATE

这个问题已在类似的问题中得到解答,这里有LEFT JOIN和LEFT OUTER JOIN在SQL Server中.

SELECT * FROM ca 
LEFT JOIN exam 
ON ca.subject = exam.subject
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM ca 
LEFT OUTER JOIN exam 
ON ca.subject = exam.subject
Run Code Online (Sandbox Code Playgroud)

Table 'CA'
--------------------
subject|score
----------------
ENG    |25
MTH    |34
BIO    |18


Table 'Exam'
--------------------
subject|score
----------------
ENG    |25
Run Code Online (Sandbox Code Playgroud)

运行2个查询会在mysql,sqlserver 2008中产生相同的结果.我没有在Oracle中测试.

subject | score1 | subject | score1
--------------------------------------
ENG       14       ENG       44
MTH       28       NULL      NULL
BIO       22       NULL      NULL
Run Code Online (Sandbox Code Playgroud)

OUTER子句的目的是什么?

mysql sql sql-server join

2
推荐指数
1
解决办法
1319
查看次数

SQL优化WHERE与JOIN

我正在使用mysql这是一个我很快写的查询,但我觉得这可以使用JOINS进行优化.这是btw的一个例子.

users table:
id user_name first_name last_name email         password
1  bobyxl    Bob        Cox       bob@gmail.com pass

player table
id role player_name user_id server_id racial_name 
3  0    boby123     1       2         Klingon
1  1    example     2       2         Race
2  0    boby2       1       1         Klingon
Run Code Online (Sandbox Code Playgroud)

SQL

SELECT `player`.`server_id`,`player`.`id`,`player`.`player_name`,`player`.`racial_name` 
FROM `player`,`users` 
WHERE `users`.`id` = 1
and `users`.`id` =  `player`.`user_id`
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用左连接,但有什么好处

SELECT `player`.`server_id`,`player`.`id`,`player`.`player_name`,`player`.`racial_name` 
FROM `player` 
LEFT JOIN `users` 
ON `users`.`id` =  `player`.`user_id`
WHERE `users`.`id` = 1
Run Code Online (Sandbox Code Playgroud)

有什么好处,我得到了相同的结果以太方式.

php mysql sql database

1
推荐指数
1
解决办法
167
查看次数

SQL 其中 ID 等于 ID 但可以为空

我正在尝试从数据库中获取一些数据。我Taak有一个可能的idPartij列的表。可能,因为它可以是真实的idPartij,但也可以是null

我得到的查询:

SELECT T.idTaak,
       T.Taaktype,
       P.Partijnaam,
       T.Naar,
       T.UltimatumDatum,
       T.Opmerking,
       T.Status,
       T.Prioriteit
FROM Taak AS T,
     Partij AS P
WHERE T.idPartij = P.idPartij
ORDER BY idTaak DESC
Run Code Online (Sandbox Code Playgroud)

当我有一个 id 时T.idPartij,这工作正常,但如前所述,该 id 可以是null. 在这种情况下,该行将不会出现在结果中。

唯一的问题:当我删除 where 子句时,我得到了很多行(因为Partij表不再被过滤......

我对 SQL 完全是个菜鸟,所以我想不出“解决”这个问题的方法。我唯一能想到的是创建 2 个查询,但我认为这不是一个好方法...

sql where

1
推荐指数
1
解决办法
3762
查看次数

确定 JOINS 中哪个表位于右侧和左侧

我对RIGHT OUTER JOINs和真的很困惑LEFT OUTER JOINs。我真的很困惑如何正确使用它们。我在INNER JOIN. 我会问一些愚蠢的问题,但我问这些问题是为了让我正确理解它们。

我怎么知道哪张桌子应该放在右边和左边。这是由哪个连接决定的吗?
我问所有这些问题是因为我正在使用 AdventureWorks 数据库并且我正在对下面的查询执行 LEFT JOIN

Select SalesLT.Customer.CompanyName, SalesLT.SalesOrderHeader.SubTotal, SalesLT.SalesOrderHeader.TaxAmt
FROM SalesLT.Customer
LEFT OUTER JOIN  SalesLT.SalesOrderHeader
ON  SalesLT.Customer.CustomerID  = SalesLT.SalesOrderHeader.CustomerID
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果

A Bike Store                NULL    NULL
Progressive Sports          NULL    NULL
Advanced Bike Components    NULL    NULL
Modular Cycle Systems       NULL    NULL
Metropolitan Sports Supply  NULL    NULL
Aerobic Exercise Company    NULL    NULL
Associated Bikes            NULL    NULL
Rural Cycle Emporium        NULL    NULL
Sharp Bikes                 NULL    NULL
 Bikes and Motorbikes       NULL …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server join adventureworks

1
推荐指数
2
解决办法
4265
查看次数

MySQL在左连接条件下不为空

我的查询看起来像:

SELECT * FROM users U LEFT JOIN posts P ON P.userId = U.id AND P.userId IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

为什么查询还返回的结果,其中userIdnull

我知道,对于我的需求,我只能使用它INNER JOIN来获取与用户相关的帖子,但是它很奇怪,可以LEFT JOIN支持多个条件,但不能用于NOT NULL条件。

mysql sql left-join

1
推荐指数
1
解决办法
3425
查看次数

SQL查询时间复杂度-连接与子查询

我的问题是关于在使用joinsub-query方法产生相同结果时的困境,

哪个更好更快?纯粹来讲时间复杂度

是否join采取O(M+N)时间复杂度?和sub-query需要O(M*N)吗?

我这样想是不是错了?如果是,请纠正我。

这里,(M,N)是两个表中的行数,将其组合以获得结果。

我正在寻找基于SQL标准的答案,而不仅仅是MySQL。

附言:我已经解决了这个问题及其所有答案。它本质上不关心时间复杂度部分。

mysql sql sql-server join subquery

1
推荐指数
1
解决办法
908
查看次数

为什么左外连接需要'ON'子句

据我所知,在两个表之间的左外连接(比如a和b)中,无论右表中行的值如何,都会检索连接左侧表的所有行.那么为什么我们需要一个'ON'子句来指定一个条件,如下所示:

select * from a LEFT OUTER JOIN b on a.some_column1 = b.some_column2;
Run Code Online (Sandbox Code Playgroud)

为什么需要声明"a.some_column1 = b.some_column2".

sql syntax join left-join outer-join

1
推荐指数
1
解决办法
217
查看次数

什么时候在 MySQL 中使用关键字 INNER 和 OUTER?

我对 MySQL 还很陌生,我不了解关键字 INNEROUTER. 我明白它们的意思,但我不明白何时会在查询中真正输入关键字。似乎 aJOIN始终是 anINNER并且 aLEFTRIGHTjoin 始终是OUTER

因此,在什么情况下人们会使用关键字而不是简单地写JOIN(always INNER?) 和LEFT JOIN(always OUTER?)

mysql

0
推荐指数
1
解决办法
157
查看次数