T-SQL从表A中全选并在表B上设置条件
如何提取名称、源、标题和字段或null(如果有CODE=x)?例子应该更好地说明这一点。它是SQL Server Express上的T-SQL 示例: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
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+列。