我有两个表:

名称: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编辑器,如果可以满足您的要求,请告诉我。如果不是这样,也许我们可以对其进行一些调整以获得实际输出。

10-06 05:55