Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL从表A中全选并在表B上设置条件_Sql_Sql Server_Tsql_Select_Join - Fatal编程技术网

T-SQL从表A中全选并在表B上设置条件

T-SQL从表A中全选并在表B上设置条件,sql,sql-server,tsql,select,join,Sql,Sql Server,Tsql,Select,Join,如何提取名称、源、标题和字段或null(如果有CODE=x)?例子应该更好地说明这一点。它是SQL Server Express上的T-SQL 示例: TableA Columns: A_ID, NAME, SOURCE, TITLE, EVENTID TableB Columns: B_ID, EVENTID, CODE, FIELD EventId 105没有代码10,因此结果应该为空。如何编写一个选择的问题,让我得到这样的结果: TableA

如何提取名称、源、标题和字段或null(如果有CODE=x)?例子应该更好地说明这一点。它是SQL Server Express上的T-SQL

示例:

TableA Columns: A_ID, NAME, SOURCE, TITLE, EVENTID
TableB Columns: B_ID, EVENTID, CODE, FIELD
EventId 105没有代码10,因此结果应该为空。如何编写一个选择的问题,让我得到这样的结果:

TableA                                 |   TableB
-----------------------------------------------------------------------
A_ID, NAME, SOURCE, TITLE, EVENTID     |   B_ID, EVENTID, CODE, FIELD
-----------------------------------------------------------------------
1     john  s1      x      100         |   1     100      5     textA  
2     bruce s2      y      105         |   2     100      10    textB
3     bob   s3      z      110         |   3     105      5     textC
                                       |   4     110      5     textD
                                       |   5     110      10    textE

这可能真的很容易,但我想不出来。。提前感谢。

您需要表之间的
外部联接

[ john  | s1 | x | textB ]
[ bruce | s2 | y |       ]
[ bob   | s3 | z | textE ]
B.code=10
条件需要放在
JOIN
中,而不是
WHERE
子句中,以避免有效地将查询变回
内部联接


如果有多条加入记录,则可以为特定的
a
值返回多行,但您的问题不清楚在您的数据中是否可以这样做(如果可以,应使用哪个
B.Field
值)这很可能是您想要的行为。

您需要表之间的
外部联接

[ john  | s1 | x | textB ]
[ bruce | s2 | y |       ]
[ bob   | s3 | z | textE ]
B.code=10
条件需要放在
JOIN
中,而不是
WHERE
子句中,以避免有效地将查询变回
内部联接

如果有多条加入记录,则可以为特定的
a
值返回多行,但您的问题不清楚在您的数据中是否可能这样做(如果可能的话,应该使用哪个
B.Field
值),这很可能是您想要的行为。

应该这样做

SELECT A.NAME,
       A.SOURCE,
       A.TITLE,
       B.FIELD
FROM   TableA A
       LEFT JOIN TableB B
         ON A.EVENTID = B.EVENTID
            AND B.CODE = 10  
这应该可以

SELECT A.NAME,
       A.SOURCE,
       A.TITLE,
       B.FIELD
FROM   TableA A
       LEFT JOIN TableB B
         ON A.EVENTID = B.EVENTID
            AND B.CODE = 10  

谢谢你的解释。也行。始终只有一个加入记录。你能告诉我,有没有一种方法可以把这个扩展到/并像这样再增加一列?例如代码15(如果存在,如果不为空)。然而,值将再次出现在字段中,只是代码不同。@yosh-对于一个额外的列,我只需将A.EVENTID=B2.EVENTID和B2.code=15上的
LEFT JOIN TableB B2添加到查询中,并将
B2.FIELD
添加到选择列表中。如果有更多,我可能会考虑另一种方法。对,我没有想到:我想我只需要1-2列。谢谢!嘿,你能告诉我如果要添加更多的列,你会怎么做。。。?如果代码在表B中,则显示3+列。感谢您的解释。也行。始终只有一个加入记录。你能告诉我,有没有一种方法可以把这个扩展到/并像这样再增加一列?例如代码15(如果存在,如果不为空)。然而,值将再次出现在字段中,只是代码不同。@yosh-对于一个额外的列,我只需将A.EVENTID=B2.EVENTID和B2.code=15上的
LEFT JOIN TableB B2添加到查询中,并将
B2.FIELD
添加到选择列表中。如果有更多,我可能会考虑另一种方法。对,我没有想到:我想我只需要1-2列。谢谢!嘿,你能告诉我如果要添加更多的列,你会怎么做。。。?如果代码在表B中,则显示3+列。