Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
SQL:按未连接的表分组_Sql - Fatal编程技术网

SQL:按未连接的表分组

SQL:按未连接的表分组,sql,Sql,我想显示一个电影名称的列表,这些电影名称在DVD商店被租了不止一次。“租赁”和“电影”表没有连接,但您可以在此处看到: 这是我到目前为止得到的,它给出了错误“rentCount不存在” SELECT title, COUNT(rental_id) AS rentCount FROM film f, rental r WHERE rentCount >= 1 GROUP BY title ORDER BY rentCount (不确定您使用的是哪种SQL,但是在SQL或MySQL中,这应该

我想显示一个电影名称的列表,这些电影名称在DVD商店被租了不止一次。“租赁”和“电影”表没有连接,但您可以在此处看到:

这是我到目前为止得到的,它给出了错误“rentCount不存在”

SELECT title, COUNT(rental_id) AS rentCount
FROM film f, rental r
WHERE rentCount >= 1
GROUP BY title
ORDER BY rentCount
(不确定您使用的是哪种SQL,但是在SQL或MySQL中,这应该可以正常工作)

电影
租赁
表的链接似乎是通过
库存
表进行的。使用
film\u id
film
加入
inventory
,然后使用
inventory\u id
inventory
加入
rental

SELECT title, COUNT(rental_id) AS rentCount
FROM film f
INNER JOIN inventory i ON i.film_id = f.film_id
INNER JOIN rental r ON i.inventory_id = r.inventory_id
HAVING rentCount >= 1
GROUP BY title
ORDER BY rentCount
编辑:感谢Nick在评论中指出的,我已经将您的
WHERE
更改为
have
,原因是您使用的是聚合函数列(
rentCount
)。

(不确定您使用的是哪种SQL,但在SQL或MySQL中,这应该有效)

电影
租赁
表的链接似乎是通过
库存
表进行的。使用
film\u id
film
加入
inventory
,然后使用
inventory\u id
inventory
加入
rental

SELECT title, COUNT(rental_id) AS rentCount
FROM film f
INNER JOIN inventory i ON i.film_id = f.film_id
INNER JOIN rental r ON i.inventory_id = r.inventory_id
HAVING rentCount >= 1
GROUP BY title
ORDER BY rentCount

编辑:感谢Nick在评论中指出的,我将您的
WHERE
更改为
HAVING
,原因是您使用的是聚合函数列(
rentCount
)。

您需要HAVING子句:

SELECT f.title, COUNT(*) AS rentCount
FROM film f
INNER JOIN inventory i 
ON i.film_id = f.film_id
INNER JOIN rental r 
ON i.inventory_id = r.inventory_id
GROUP BY f.title
HAVING COUNT(*)  > 1
ORDER BY f.title

注意,我没有在HAVING中引用别名“rentCount”。

您需要HAVING子句:

SELECT f.title, COUNT(*) AS rentCount
FROM film f
INNER JOIN inventory i 
ON i.film_id = f.film_id
INNER JOIN rental r 
ON i.inventory_id = r.inventory_id
GROUP BY f.title
HAVING COUNT(*)  > 1
ORDER BY f.title

请注意,我没有在have中引用别名“rentCount”。

SQL将不允许在同一查询的筛选条件中使用列别名。如果要使用列名,则需要像下面这样作为子查询使用

SELECT *
 FROM
   (SELECT title, COUNT(r.rental_id) AS rentCount
  FROM film f
      JOIN Inventory I on f.film_id=I.film_id
    JOIN rental r on l.Inventory_id= r.Inventory_id
  GROUP BY title)t
  WHERE rentCount >= 1
  ORDER BY rentCount
如果您使用的是aggregate函数,并且希望在查询中进行筛选,那么也可以使用HAVING子句

  SELECT *
 FROM
   (SELECT title, COUNT(r.rental_id) AS rentCount
  FROM film f
      JOIN Inventory I on f.film_id=I.film_id
    JOIN rental r on l.inventory_id= r.inventory_id
  GROUP BY title
   Having Count(rental_id)>=1)t
  ORDER BY rentCount
请始终记住,永远不要使用逗号来链接或建立表之间的关系。编写适当的连接并链接它们。在您的情况下,如果使用Inner连接,则不需要文件服务器条件“Where rentCount>=1”,因为该条件将始终返回真值。我的意思是,下面的查询将给你和其他查询一样的结果

 SELECT title, COUNT(r.rental_id) AS rentCount
  FROM film f
      JOIN Inventory I on f.film_id=I.film_id
      JOIN rental r on l.inventory_id= r.inventory_id
  GROUP BY title

SQL将不允许在同一查询的筛选条件中使用列别名。如果要使用列名,则需要将其用作子查询,如下所示

SELECT *
 FROM
   (SELECT title, COUNT(r.rental_id) AS rentCount
  FROM film f
      JOIN Inventory I on f.film_id=I.film_id
    JOIN rental r on l.Inventory_id= r.Inventory_id
  GROUP BY title)t
  WHERE rentCount >= 1
  ORDER BY rentCount
如果您使用的是aggregate函数,并且希望在查询中进行筛选,那么也可以使用HAVING子句

  SELECT *
 FROM
   (SELECT title, COUNT(r.rental_id) AS rentCount
  FROM film f
      JOIN Inventory I on f.film_id=I.film_id
    JOIN rental r on l.inventory_id= r.inventory_id
  GROUP BY title
   Having Count(rental_id)>=1)t
  ORDER BY rentCount
请始终记住,永远不要使用逗号来链接或建立表之间的关系。编写适当的连接并链接它们。在您的情况下,如果使用Inner连接,则不需要文件服务器条件“Where rentCount>=1”,因为该条件将始终返回真值。我的意思是,下面的查询将给你和其他查询一样的结果

 SELECT title, COUNT(r.rental_id) AS rentCount
  FROM film f
      JOIN Inventory I on f.film_id=I.film_id
      JOIN rental r on l.inventory_id= r.inventory_id
  GROUP BY title

使用
HAVING
而不是
WHERE
来解决初始问题。如果这些表之间没有链接,那么您的查询就没有意义。至少要使用别名来说明哪一列是什么意思,用
HAVING
而不是
WHERE
来解决您最初的问题。如果这些表之间没有链接,那么您的查询就没有意义。至少要使用别名来说明哪列表示什么