MySQL新手,我被困在SAKILA练习中

MySQL新手,我被困在SAKILA练习中,mysql,sql,Mysql,Sql,一个月前我开始学习SQL,我发现了这个SAKILA作业,我想我应该试试,来测试自己。我有点被困在运动中,我不知道我做错了什么。有人能帮我吗 问题是: 查找与ID为8的演员的名字相同的所有演员和客户的名字。不要返回ID为8的演员本人。请注意,您不能使用ID为8的参与者的名称作为常量,而只能使用ID。解决此问题的方法不止一种,但您只需要提供一种解决方案 我的代码是: 一, 二, 我得到了很多返回的名字,但没有一个是正确的。我做错了什么?为什么代码返回的名称与演员的Id为8的名称不同。 Select

一个月前我开始学习SQL,我发现了这个SAKILA作业,我想我应该试试,来测试自己。我有点被困在运动中,我不知道我做错了什么。有人能帮我吗

问题是:

查找与ID为8的演员的名字相同的所有演员和客户的名字。不要返回ID为8的演员本人。请注意,您不能使用ID为8的参与者的名称作为常量,而只能使用ID。解决此问题的方法不止一种,但您只需要提供一种解决方案

我的代码是:

一,

二,

我得到了很多返回的名字,但没有一个是正确的。我做错了什么?为什么代码返回的名称与演员的Id为8的名称不同。

Select C.firstName, C.lastName 
from Customer C, actor A 
where C.firstName=A.firstName and C.lastName=A.lastName and A.id=8
这意味着您正在数据库中搜索customer表中的所有记录,其中名字和姓氏与表Actor的id为8的记录中的名字和姓氏完全相同。使用and是因为希望所有条件同时为真。你不需要从演员身上提取任何东西,因为你不需要它:选择在内部起作用;无论如何,您还应该从customer中提取其他重要数据,否则您只会得到一堆完全相同的行

查询编号2:

Select A.fistName, A.lastName 
from actor A 
where A.firstName=(
  select firstName 
  from actor where id=8
) and A.lastName=(
  select lastName 
  from actor where id=8
) and id<>8

您必须使用子查询,即选择;这是因为如果在表actor中搜索id=8,则只会得到一行,即id=8的行。通过子查询,数据库首先获取用于比较的数据,然后才搜索其他行。

您需要获取参与者以及客户名称。两者都在两个不同的表格中;因此,一种方法是使用UNION ALL


因为你需要把演员和服装师的名字结合起来,我们会先和工会合作。然后,该结果集与actor 8联接以匹配firstname

SELECT s.first_name,s.last_name 
FROM (
  SELECT c.first_name,c.last_name 
  FROM customer c
  UNION ALL
  SELECT a.first_name,a.last_name 
  FROM actor a
  WHERE a.actor_id != 8
) as s
  JOIN actor a8 ON a8.first_name = s.first_name
WHERE a8.actor_id=8

我想说这需要一点解释。谢谢你的明确回答。我没有想到要使用工会,我一直试图与Join一起解决这个问题谢谢你的回答。它返回正确的名称
Select A.fistName, A.lastName 
from actor A 
where A.firstName=(
  select firstName 
  from actor where id=8
) and A.lastName=(
  select lastName 
  from actor where id=8
) and id<>8
(SELECT customer_id AS id, 
        first_name, 
        last_name
 FROM customer
 WHERE first_name = (SELECT first_name FROM actor WHERE actor_id = 8))

UNION ALL

(SELECT actor_id AS id, 
        first_name, 
        last_name
 FROM actor
 WHERE actor_id <> 8 AND 
       first_name = (SELECT first_name FROM actor WHERE actor_id = 8))
SELECT s.first_name,s.last_name 
FROM (
  SELECT c.first_name,c.last_name 
  FROM customer c
  UNION ALL
  SELECT a.first_name,a.last_name 
  FROM actor a
  WHERE a.actor_id != 8
) as s
  JOIN actor a8 ON a8.first_name = s.first_name
WHERE a8.actor_id=8