连接表时SQL结果中的差异

时间:2016-09-20 00:01:15

标签: mysql sql

我正在尝试编写一个查询,该查询将返回SAKILA数据库中所有以法语为原始语言的电影。预期的结果是0行。

当我使用//查找以法语作为语言的标题时,我得到了预期的结果:

language_id

然而, 我试图在不使用文字SELECT title, release_year FROM sakila.film WHERE language_id =5; 的情况下获得此结果,而是加入两个表格来选择电影的原始语言。

当我写:

(language_id)

我得到所有行。

2 个答案:

答案 0 :(得分:0)

您没有在两个表之间指定任何连接条件。因此,查询生成的是笛卡尔积,绝对不是您想要的。

如果您使用ANSI样式的连接,语法会让您朝正确的方向推动:

select f.title, f.release_year
  from film f
  join language l
    on l.language_id = f.language_id -- you are missing this join condition
   and l.name = 'french'

答案 1 :(得分:0)

如果您不想使用join,则需要在其中添加一个条件。

SELECT T1.title, AVG(V.vote) AS avg_vote
FROM posts T1
JOIN (
    SELECT *
    FROM (
        SELECT v.*, @r := IF(@p = post_id, @r+1, 1) AS rownum, @p := post_id
        FROM (SELECT @p:=null, @r:=0) AS _init
        CROSS JOIN votes v
        ORDER BY v.post_id, v.id DESC
    ) AS t
    WHERE t.rownum <= 10
) AS V ON T1.id = V.post_id
GROUP BY T1.id;