2017-10-18 71 views
0

的标准我有一个表名和它们共享相同的位置剔除结果输出

John NY 
Paul NY 
Andrew NY 
Eva NY 
Patrick NJ 
Sally CA 
Aby NJ 

现在,我创建了一个脚本这一个标准,用户可以选择一个名称(如:名称='约翰') 一旦名字被选中,一列也会列出纽约所有其他的名字(保罗,安德鲁,伊娃)。

我可以用下面的plsql创建它,但你永远不知道谁会被选中。所以我不能硬编码。它看起来很简单,但我正在为此而努力。我想要一种无需选择使用标准就可以获得奖励的方式。

选择d.name,d.location,OTHER_NAME

从MYWORK d

其中d.location = 'NY'

和d.name!= '约翰'

+1

你使用的是MySQL还是Oracle?不要标记不涉及的产品。 – jarlh

回答

0

如果只有2个级别,那么自我加入是我最喜欢的方法:

SELECT d2.name, d.location 
FROM (SELECT DISTINCT location FROM Yourtable WHERE name = 'John') L 
JOIN Yourtable L2 ON L.location = L2.location 

如果locati on/name是不同的,这也可以写成:

SELECT d2.name, d.location 
FROM Yourtable l 
JOIN Yourtable L2 ON L.location = L2.location 
WHERE l.name = 'John' 

我不确定你希望列的外观。这可能是你在之后:

SELECT d.name, d.location, d2.name 
FROM Yourtable l 
JOIN Yourtable L2 ON L.location = L2.location 
WHERE l.name = 'John' 
AND l2.name <> 'John' 
+0

非常感谢你的亚伦。第三个是我所追求的。现在我的下一步工作就是把它带到一个更大的脚本中,从最后的名字将作为标准的下标中删除硬编码名称。 – user3139937

+0

@ user3139937乐于帮助。这只是第三个查询,“name”是一个变量,可以作为参数传递。如果您需要帮助,请随时提出另一个问题。 SO喜欢单独的问题。此外,如果答案可以帮助您,请不要忘记接受答案/ upvote。 –