相关疑难解决方法(0)

SQL离开连接与FROM行上的多个表?

大多数SQL方言都接受以下查询:

SELECT a.foo, b.foo
FROM a, b
WHERE a.x = b.x

SELECT a.foo, b.foo
FROM a
LEFT JOIN b ON a.x = b.x
Run Code Online (Sandbox Code Playgroud)

现在很明显,当您需要外连接时,需要第二种语法.但是在进行内部连接时,为什么我更喜欢第二种语法(反之亦然)?

sql syntax join

245
推荐指数
7
解决办法
25万
查看次数

在MySQL查询中,为什么要使用join而不是where?

似乎要组合两个或更多表,我们可以使用join或where.一个优于另一个的优点是什么?

mysql sql database

105
推荐指数
4
解决办法
5万
查看次数

MySQL中逗号分隔的连接和语法连接之间有什么区别?

例如,如果我有一个表"Person",其列"id"引用表"Worker"中的列"id"

这两个查询之间有什么区别?它们产生相同的结果.

SELECT * 
FROM Person 
JOIN Worker 
  ON Person.id = Worker.id;
Run Code Online (Sandbox Code Playgroud)

SELECT * 
FROM Person, 
     Worker 
WHERE Person.id = Worker.id;
Run Code Online (Sandbox Code Playgroud)

谢谢

mysql sql syntax join

86
推荐指数
4
解决办法
7万
查看次数

SQL JOIN:USING,ON或WHERE有区别吗?

我想知道SQL在这些连接语句上执行的方式是否有任何不同:

SELECT * FROM a,b WHERE a.ID = b.ID

SELECT * FROM a JOIN b ON a.ID = b.ID

SELECT * FROM a JOIN b USING(ID)
Run Code Online (Sandbox Code Playgroud)

有性能差异吗?还是算法差异?

或者只是语法糖?

sql syntax performance expression join

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

多表选择与JOIN(性能)

从MySQL中的多个表中进行选择时,以下两个查询都返回相同的结果集.

其中一个查询比另一个查询更好还是更有效?从我对小数据集的测试(每个表中约2k行),它们都在大约相同的执行时间内返回相同的结果集.

查询1:

SELECT
    *
FROM
    products,
    product_meta,
    sales_rights
WHERE 
    (
        products.id = product_meta.product_id
        AND products.id = sales_rights.product_id
    )
    AND (...)
LIMIT 0,10;
Run Code Online (Sandbox Code Playgroud)


查询2:

SELECT
    *
FROM
    products
INNER JOIN product_meta ON products.id = product_meta.product_id
JOIN sales_rights ON product_meta.product_id = sales_rights.product_id 
WHERE
    (...)
LIMIT 0,10;
Run Code Online (Sandbox Code Playgroud)

mysql

34
推荐指数
1
解决办法
4万
查看次数

在JOIN和WHERE中过滤查询的区别?

在SQL中,我试图根据ID过滤结果,并想知道它们之间是否存在任何逻辑差异

SELECT value 
FROM table1 
JOIN table2 ON table1.id = table2.id 
WHERE table1.id = 1
Run Code Online (Sandbox Code Playgroud)

SELECT value 
FROM table1 
JOIN table2 ON table1.id = table2.id AND table1.id = 1
Run Code Online (Sandbox Code Playgroud)

对我来说,它好像逻辑是不同的,虽然你总是会得到相同的结果集,但我不知道是否有下,你会得到两个不同的结果集(或将它们总是返回完全相同的两个结果集的任何条件)

sql join resultset where

29
推荐指数
2
解决办法
8660
查看次数

内连接与select连接SQL语句中的位置之间的区别

我有两个选择连接SQL语句:

select a.id from table_a as a, table_b as b where a.id=b.id;
select a.id from table_a as a inner join table_b as b on a.id=b.id;
Run Code Online (Sandbox Code Playgroud)

显然,它们的结果是一样的.但它们之间是否存在差异,例如性能,可移植性.

sql select join

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

INNER JOIN vs"FROM"中的多个表名

可能重复:
INNER JOIN与WHERE子句 - 有什么区别吗?

INNER JOIN查询和隐式连接查询(在FROM关键字后列出多个表)之间有什么区别?例如:

给出以下两个表:

CREATE TABLE Statuses(
  id INT PRIMARY KEY,
  description VARCHAR(50)
);
INSERT INTO Statuses VALUES (1, 'status');

CREATE TABLE Documents(
  id INT PRIMARY KEY,
  statusId INT REFERENCES Statuses(id)
);
INSERT INTO Documents VALUES (9, 1);
Run Code Online (Sandbox Code Playgroud)

这两个SQL查询之间有什么区别?从我完成的测试中,他们返回相同的结果.他们做同样的事情吗?是否存在返回不同结果集的情况?

SELECT s.description FROM Documents d, Statuses s WHERE d.statusId = s.id AND d.id = 9;

SELECT s.description FROM Documents d INNER JOIN Statuses s ON d.statusId = s.id WHERE d.id = 9;
Run Code Online (Sandbox Code Playgroud)

sql

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

出于性能原因,SQL JOIN是否应按特定顺序排列?

假设我有以下查询.如果在加入t1和t2时没有匹配项,那么MySQL会忽略所有其他连接吗?

我问的原因是,如果没有,那么我将分解查询并使用PHP将它拼凑在一起.如果没有性能损失,那么我将按照这样的顺序放置我的JOIN,一旦前一个JOIN没有,就不会继续.谢谢

SELECT whatever
FROM t1
INNER JOIN t2 ON t2.t1id=t1.id
INNER JOIN t3 ON t3.t2id=t2.id
INNER JOIN t4 ON t4.t3id=t3.id
INNER JOIN t5 ON t5.t4id=t4.id
INNER JOIN t6 ON t6.t5id=t5.id
INNER JOIN t7 ON t7.t6id=t6.id
INNER JOIN t8 ON t8.t7id=t7.id
INNER JOIN t9 ON t9.t8id=t8.id
WHERE t1.c=123 AND t4.c=321 AND t6.c=222 AND t9.c=222
Run Code Online (Sandbox Code Playgroud)

mysql optimization

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

SQL - SubQuery和外表之间的关系

问题

我需要更好地理解有关何时可以在子查询中引用外部表以及何时(以及为什么)这是不合适的请求的规则.我在Oracle SQL查询中发现了一个重复,我正在尝试重构,但是当我尝试将我的引用表转换为分组子查询时,我遇到了问题.

以下声明适用:

SELECT  t1.*  
FROM    table1 t1, 
INNER JOIN table2 t2 
        on t1.id = t2.id        
        and t2.date = (SELECT max(date) 
                       FROM   table2  
                       WHERE  id = t1.id) --This subquery has access to t1
Run Code Online (Sandbox Code Playgroud)

不幸的是,table2有时会有重复的记录,所以在将它加入t1之前我需要首先聚合t2.但是,当我尝试将其包装在子查询中以完成此操作时,SQL引擎突然无法再识别外部表.

SELECT  t1.* 
FROM    table1 t1, 
INNER JOIN (SELECT * 
            FROM  table2 t2
            WHERE t1.id = t2.id              --This loses access to t1
              and t2.date = (SELECT max(date) 
                             FROM   table2 
                             WHERE  id = t1.id)) sub on t1.id = sub.id 
                             --Subquery loses access to t1
Run Code Online (Sandbox Code Playgroud)

我知道这些是根本不同的查询,我要求编译器放在一起,但我不知道为什么一个会工作而不是另一个.

我知道我可以复制子查询中的表引用,并有效地将子查询从外部表中分离,但这似乎是完成此任务的一种非常难看的方式(所有代码和处理的重复都是如此).

有用的参考资料 …

sql subquery derived-table correlated-subquery inline-view

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