我是SQL Server的新手,所以请求你不要被愚蠢的问题弄得冒犯。
我的数据库中有六个脱节表(table1,table2(要查询的两列),table3,table4,table5,table6(这是表5的子表))。
这些是不同的表,我想使用单个查询从每个表中的一列搜索数据,如果找到则填充行。
我正在运行以下查询
SELECT
table1.*
, table2.*
, table3.*
, table4.*
, table5.*
, table6.*
FROM
dbo.table1
FULL OUTER JOIN
dbo.table2 ON table1.col1 = table2.col_A OR table1.col1 = table2.col_B
FULL OUTER JOIN
dbo.table3 ON table2.col_A = table3.col_F OR table2.col_B = table3.col_F
FULL OUTER JOIN
dbo.table4 ON table3.col_F = table4.col_I
FULL OUTER JOIN
dbo.table5 ON table4.col_I = table5.col_N
INNER JOIN
dbo.table6 ON table5.col_N = table6.col_U OR table5.col_N = table6.col_V
WHERE
table1.col1 LIKE '%' + USERINPUT + '%'
OR table2.col_A LIKE '%' + USERINPUT + '%'
OR table2.col_B LIKE '%' + USERINPUT + '%'
OR table3.col_F LIKE '%' + USERINPUT + '%'
OR table4.col_I LIKE '%' + USERINPUT + '%'
OR table5.col_N LIKE '%' + USERINPUT + '%'
但是我没有得到所有表格的结果。但是当我单独跑步时,我得到了正确的结果。例如
SELECT table1.*
FROM dbo.table1
WHERE
table1.col1 LIKE '%' + USERINPUT + '%'
SELECT table5.* , table6.*
FROM
dbo.table5
INNER JOIN
dbo.table6 ON table5.col_N = table6.col_U OR table5.col_N = table6.col_V
WHERE
table5.col_N LIKE '%' + USERINPUT + '%'
所有帮助都有助于解决这个问题。简而言之,希望在所有表中运行单个查询并仅显示匹配的行
答案 0 :(得分:0)
我认为这里的问题是您使用full outer join
,但条件需要匹配。
例如,考虑加入table4
:
ON table3.col_F = table4.col_I
好吧,要从Table4
获取任何匹配的行,您必须在NULL
中拥有非table3.col_F
值。但是,由于full outer join
,可能会有很多NULL
个值。这并没有将结构转换为inner join
,但它最终会在自己的行上生成许多table4
个值,其他所有值都为NULL
。
除非你真的知道自己在做什么,否则你可能不需要full outer join
。有时,您可以将此类查询重新定义为带有聚合的union all
,或者只使用left join
或inner join
。