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