Sql server 当一个表的外键字段中的值相同时,从两个表中获取记录

Sql server 当一个表的外键字段中的值相同时,从两个表中获取记录,sql-server,Sql Server,我有两个表,我只需要从表A中获取记录,其中表B在其字段状态中所有状态记录都是进程 Table A --------------------------------------------------- Id Folio Date Amount YY1 001 01/01/2014 300 YY2 002 02/01/2014 400 YY3 003

我有两个表,我只需要从表A中获取记录,其中表B在其字段状态中所有状态记录都是进程

Table A
---------------------------------------------------
Id        Folio        Date            Amount
YY1       001          01/01/2014       300
YY2       002          02/01/2014       400
YY3       003          03/01/2014       500
YY4       004          04/01/2014       600

Table B
---------------------------------------------------
Id        Table_A_Id        Status          
XY1       YY1               Process
XY2       YY1               Process
XY3       YY1               Process
XY4       YY2               Process
XY5       YY2               Rejected
XY6       YY2               Process 
XY7       YY3               Process
XY8       YY3               Rejected
XY9       YY3               Finish
XY10      YY4               Process
XY11      YY4               Process
XY12      YY4               Process
我想要这个

Id        Folio        Date        Amount
-------------------------------------------
YY1        001        01/01/2014     300
YY4        004        04/01/2014     600

你真的应该自己尝试一下,但是看看这个

CREATE TABLE #table1(Id  VARCHAR(5), Folio VARCHAR(5), Date  datetime, Amount numeric(28,12))

INSERT INTO #table1(id, folio, date, amount)
VALUES('YY1', '001', '01/01/2014', 300)
INSERT INTO #table1(id, folio, date, amount)
VALUES('YY2', '002', '02/01/2014', 400)
INSERT INTO #table1(id, folio, date, amount)
VALUES('YY3', '003', '03/01/2014', 500)
INSERT INTO #table1(id, folio, date, amount)
VALUES('YY4', '004', '04/01/2014', 600)

CREATE TABLE #table2(id VARCHAR(5), table_a_id VARCHAR(5), status VARCHAR(20))

INSERT INTO #table2(id,table_a_id,status)
VALUES('XY1', 'YY1', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY2', 'YY1', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY3', 'YY1', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY4', 'YY2', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY5', 'YY2', 'Rejected')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY6', 'YY2', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY7', 'YY3', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY8', 'YY3', 'Rejected')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY9', 'YY3', 'Finish')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY10', 'YY4', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY11', 'YY4', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY12', 'YY4', 'Process')

SELECT *
FROM #table1 t1
WHERE t1.id NOT IN  (
                        SELECT table_a_id
                        FROM #table2
                        WHERE status <> 'Process'
                    ) 


DROP TABLE #table1
DROP TABLE #table2

你真的应该自己尝试一下,但是看看这个

CREATE TABLE #table1(Id  VARCHAR(5), Folio VARCHAR(5), Date  datetime, Amount numeric(28,12))

INSERT INTO #table1(id, folio, date, amount)
VALUES('YY1', '001', '01/01/2014', 300)
INSERT INTO #table1(id, folio, date, amount)
VALUES('YY2', '002', '02/01/2014', 400)
INSERT INTO #table1(id, folio, date, amount)
VALUES('YY3', '003', '03/01/2014', 500)
INSERT INTO #table1(id, folio, date, amount)
VALUES('YY4', '004', '04/01/2014', 600)

CREATE TABLE #table2(id VARCHAR(5), table_a_id VARCHAR(5), status VARCHAR(20))

INSERT INTO #table2(id,table_a_id,status)
VALUES('XY1', 'YY1', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY2', 'YY1', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY3', 'YY1', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY4', 'YY2', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY5', 'YY2', 'Rejected')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY6', 'YY2', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY7', 'YY3', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY8', 'YY3', 'Rejected')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY9', 'YY3', 'Finish')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY10', 'YY4', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY11', 'YY4', 'Process')
INSERT INTO #table2(id,table_a_id,status)
VALUES('XY12', 'YY4', 'Process')

SELECT *
FROM #table1 t1
WHERE t1.id NOT IN  (
                        SELECT table_a_id
                        FROM #table2
                        WHERE status <> 'Process'
                    ) 


DROP TABLE #table1
DROP TABLE #table2

没问题。如果这回答了你的问题,请接受答案。没问题。如果这回答了你的问题,请接受答案。