【发布时间】:2014-04-13 21:50:11
【问题描述】:
我在一次采访中被要求在白板上做这个,我的解决方案似乎太复杂了,无法用白板回答。
我有两张表,一张有 ids 和 names 作为表 Person,另一个有 id、person_id 和friend_id 作为表 Friend。 Friend 表中的一行表示两个人之间的友谊。我想在不知道她身份的情况下找到“吉娜”的所有友谊实例。
我想出了:
SELECT DISTINCT name FROM
(SELECT name1 AS name FROM
(SELECT p1.name AS name1, p2.name AS name2 FROM friend f INNER JOIN person p1 ON f.person_id = p1.id INNER JOIN person p2 ON f.friend_id = p2.id WHERE p2.name LIKE 'Gina' OR p1.name LIKE 'Gina') AS group1
UNION ALL
SELECT name2 AS name FROM
(SELECT p1.name AS name1, p2.name AS name2 FROM friend f INNER JOIN person p1 ON f.person_id = p1.id INNER JOIN person p2 ON f.friend_id = p2.id WHERE p2.name LIKE 'Gina' OR p1.name LIKE 'Gina') AS group2)
AS combo WHERE name <> 'Gina';
我在白板上的想法不是很好,这不是最好的解决方案。谁能优化一下?
为几个朋友制作了一个 sqlfiddle 以供之后捣乱:
【问题讨论】:
-
他们要求你做一个简单的
JOIN声明。 -
不管被问到什么问题,有没有办法针对我的问题优化我的回答
-
@hermanthriller 你在这里找到答案了吗?还有什么我可以帮忙的吗?
标签: mysql sql query-performance