我有两个表:
名称:first_name,last_name,uid
name_reference:name_uid_in,name_uid_out
我需要搜索与被搜索人有某种关系的人(在本例中为Anderson)。安德森写下来,他认识人A,B,C。因此,在“名称参考”表中,将有3个条目,其中安德森的uid为name_uid_in,A,B和C的uid为name_uid_out。
当人D来时出现问题。安德森不认识人D,但人D认识安德森。现在,如果我搜索Anderson的uid,则输出中将不包含人D。即使他与安德森(Anderson)有关系。
下面的第一个查询仅在name_uid_in列中搜索Anderson的uid,但我还需要它在name_uid_out列中搜索Anderson的uid。有没有一种方法可以搜索两个列,而不必像第二个查询一样第二次搜索Anderson的uid?数据库将变得相当大,因此我需要在有效的时间内返回人员的A,B,C和D。
第一次查询SELECT z.first_name, z.last_name, z.uid FROM name as z WHERE z.uid IN ( SELECT y.name_uid_out as uid FROM name_reference as y WHERE name_uid_in in ( SELECT uid FROM name WHERE last_name="Anderson") )
第二查询
`SELECT z.first_name, z.last_name, z.uid
FROM name as z
WHERE z.uid IN (
SELECT y.name_uid_out as uid
FROM name_reference as y
WHERE name_uid_in in (
SELECT uid
FROM name
WHERE last_name="Anderson" )
)
OR uid in (
SELECT name_uid_in
FROM name_reference
WHERE name_uid_out in (
SELECT uid
FROM name
WHERE last_name="Anderson" )
)`
最佳答案
将联接查询与两个联接子句一起使用。它将更易于管理。
在uid = name_uid_in上联接表名和name_reference
在同一查询中,对uid = name_uid_out使用name_reference进行第二次联接
使用where子句,其中uid =“ ANDERSON”
选择z.first_name,z.last_name,z.uid
FROM名称为z
内部联接
name_reference为y
上
z.uid = y.name_uid_out
内部联接
name_reference为x
上
z.uid = x.name_uid_in
哪里
z.last_name =“ Anderson”
另外,在select子句中,您可以使用别名来查看表中的相应输出。例如,
选择z.uid,y.name_uid_in,z.name_uid_out等以验证查询输出。
附言:-我的计算机上没有SQL编辑器,如果可以满足您的要求,请告诉我。如果不是这样,也许我们可以对其进行一些调整以获得实际输出。