多列连接

时间:2014-11-04 14:17:51

标签: sql join ms-access-2010

我有两个表:datastructure我试图查询以返回包含data的所有列和structure的单个列的记录集。我似乎无法弄清楚连接。这将在Access 2010中执行,所有字段都是字符串。

data包含三列:CountryStateCitystructure还包含这三列以及storeID。如果要在datastructure之间连接国家,州,城市,则存在多对一的关系。我需要查询来选择data中的所有字段和storeID的新列。理想情况下,storeID已经在data,但不幸的是,我无法控制。

data看起来像

Country   State   City   Value
US        FL      MIA    1.0
US        FL      MIA    2.1
CA        BC      VAN    0.8
MX        CH      JUA    1.2

structure看起来像

Country   State   City   storeID
US        FL      MIA    4522
CA        BC      VAN    3866
MX        CH      JUA    8985

希望查询返回

Country   State   City   Value  storeID
US        FL      MIA    1.0    4522
US        FL      MIA    2.1    4522
CA        BC      VAN    0.8    3866
MX        CH      JUA    1.2    8985

3 个答案:

答案 0 :(得分:0)

SELECT data.*, structure.storeID FROM data LEFT OUTER JOIN structure USING(storeID)

答案 1 :(得分:0)

SELECT data.Country, data.State, data.City, data.Value, structure.StoreID
FROM data
LEFT OUTER JOIN structure USING(structure.StoreID)

答案 2 :(得分:0)

您可以在JOIN子句中使用多个条件:将它们与布尔运算符分开,就像在WHERE子句中一样(AND,OR等)。您的目标是将所有条件评估为TRUE或FALSE,但在该范围内您可以做很多事情。

在您的具体情况下,它非常简单 - 使用两个表中的Country,State和City列进行连接。我在下面的查询中设置了一些示例数据:

DECLARE @Data TABLE (Country VARCHAR(2), State VARCHAR(2), City VARCHAR(3), Value DECIMAL(2,1))
DECLARE @Structure TABLE (Country VARCHAR(2), State VARCHAR(2), City VARCHAR(3), StoreID INT)


INSERT INTO @Data (Country, State, City, Value) VALUES ('US', 'FL', 'MIA', 1.0)
INSERT INTO @Data (Country, State, City, Value) VALUES ('US', 'FL', 'MIA', 2.1)
INSERT INTO @Data (Country, State, City, Value) VALUES ('CA', 'BC', 'VAN', 0.8)
INSERT INTO @Data (Country, State, City, Value) VALUES ('MX', 'CH', 'JUA', 1.2)


INSERT INTO @Structure (Country, State, City, StoreID) VALUES ('US', 'FL', 'MIA', 4522)
INSERT INTO @Structure (Country, State, City, StoreID) VALUES ('CA', 'BC', 'VAN', 3866)
INSERT INTO @Structure (Country, State, City, StoreID) VALUES ('MX', 'CH', 'JUA', 8985)


SELECT d.Country, d.State, d.City, d.Value, s.StoreID
FROM 
    @Data d
     LEFT JOIN 
    @Structure s ON 
        d.Country = s.Country AND
        d.State = s.State AND
        d.City = s.City