2017-09-01 147 views
0

我在SQL上遇到了一些麻烦。 我有如下的数据库结构 enter image description here 我应该写一个查询返回:所有moviestar的姓名和地址,他们是女人(G ='F')和地址=“柏林”+所有工作室的名称和地址,其中地址=“柏林”。按地址排序。关于数据库的SQL查询

我的建议是:

SELECT * FROM 
    (SELECT name, address 
    FROM MovieStar 
    WHERE gender = 'F' 
    UNION 
    SELECT name, address FROM Studio) T 
WHERE T.address LIKE '%Berlin%' ORDER BY T.address; 
+1

帮助我们帮助你 - s讨论一些示例数据和你试图获得的结果 – Mureinik

+0

我看了一下数据库结构,如果你真的使用这些名称作为键,你会遇到很大的问题。使用例如每个表的整数ID和链接使用ID的表,而不是名称。 –

+0

你应该使用数字键。如果有两个同名的电影或两个同名的电影怎么办? – SEarle1986

回答

1

这应该为你工作。

SELECT name, address 
    FROM MovieStar 
    WHERE gender = 'F' AND address LIKE '%Berlin%' 
    UNION 
    SELECT name, address FROM Studio WHERE address LIKE '%Berlin%' 
ORDER BY address; 
+0

它看起来接近我的解决方案,tnx。 –

0

你可以做这个

SELECT name, address from MovieStar WHERE gender='F' AND address LIKE '%Berlin%' 
UNION 
SELECT name, address from Studio WHERE address LIKE '%Berlin' 

,如果你想就像你在你的例子确实使用子查询,我认为你必须添加“为”关键字的子查询

SELECT * FROM 
    (SELECT name, address 
    FROM MovieStar 
    WHERE gender = 'F' 
    UNION 
    SELECT name, address FROM Studio) AS T 
WHERE T.address LIKE '%Berlin%' ORDER BY T.address; 

但我不确定,这是一个很好的性能,因为你将有一个内存表创建,然后投影

+0

性能不成问题。我只是想确保我的解决方案能够工作,因为我无法测试它。 –

+0

然后第一个查询将工作 –