一个月前我开始学习sql,我发现了这个sakila作业,我想我应该试试,来测试我自己。我有点坚持锻炼,我不知道我做错了什么。有人能帮我吗?
问题是:
查找与id为8的演员的名字相同的所有演员和客户的名字(名字和姓氏)。不要把id为8的演员还给他自己。请注意,不能将id为8的参与者的名称用作常量(仅id)。解决这个问题的方法不止一种,但您只需要提供一种解决方案。
我的代码是:
1
SELECT customer.first_name,customer.last_name FROM customer
LEFT JOIN actor ON (customer.first_name LIKE actor_id=8)
AND (actor.first_name LIKE actor_id=8)
2
SELECT customer.first_name,customer.last_name FROM customer
LEFT JOIN actor ON customer_id=actor_id
WHERE (customer.first_name LIKE actor_id=8) AND (actor.first_name LIKE actor_id=8)
我得到了很多返回的名字,但没有一个是正确的。我做错什么了?为什么代码没有返回与身份证号为8的演员相同的名字。
3条答案
按热度按时间kwvwclae1#
既然你需要把演员和服装师的名字结合起来,我们就先和工会联系。然后,该结果集与actor 8连接以匹配firstname。
5lhxktic2#
我会说
这意味着,您正在数据库中搜索“customer”表中的所有记录,其中的名字和姓氏与表actor的id为8的记录中的名字和姓氏完全相同。使用“and”是因为希望所有条件同时为真。你不需要从演员那里提取任何东西,因为你不需要它:它是“选择”在内部完成的;无论如何,您还应该从customer中提取其他重要的数据,否则您只会得到一堆完全相同的行。
查询n°2:
必须使用子查询,即“select”between();这是因为如果在表actor中搜索id=8,只会得到一行,即id=8的行。对于子查询,db首先获取用于比较的数据,然后才搜索其他行。
nimxete23#
你需要得到演员和顾客的名字。两者都在两张不同的table上;因此,一种方法是
UNION ALL
.