Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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/6/cplusplus/127.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
Sql Join在查询时获取错误信息_Sql_Sql Server 2008 - Fatal编程技术网

Sql Join在查询时获取错误信息

Sql Join在查询时获取错误信息,sql,sql-server-2008,Sql,Sql Server 2008,我在连接查询方面遇到一些问题。我想要的是选择两个表的行,这两个表有一些相似的状态,其他的没有。我有一个状态等价视图 Table Sales: ID ..... StateID 1 1 2 1 3 6 Table Orders ID ..... StateID 11 2 12 2 15 3 Table StatesEquivalence ID SalesState

我在连接查询方面遇到一些问题。我想要的是选择两个表的行,这两个表有一些相似的状态,其他的没有。我有一个状态等价视图

Table Sales:
ID  .....   StateID
1           1
2           1
3           6

Table Orders
ID  .....   StateID
11          2
12          2
15          3

Table StatesEquivalence
ID  SalesState   OrdersState    StateName
1   1            2              Attended
2   2            3              Declined
我已经将两个表(Sales和Orders)合并在一起,我想要一个列,其中包含等效的StateID和StateName,方法如下:

SELECT sales.ID as ID,equivalence.ID as State,equivalence.StateName
FROM Sales
INNER JOIN StatesEquivalence as equivalence
ON sales.StateID = equivalence.SalesState
WHERE sales.ID = 1
UNION
SELECT orders.ID as ID,equivalence.ID as State,equivalence.StateName
FROM Orders as orders
INNER JOIN StatesEquivalence as equivalence
ON orders.StateID = equivalence.OrdersState
不知怎的,我得到了关于等价物的错误信息

ID      State        StateName
1       2            Attended
2       2            Attended
11      2            Attended
...
我不知道发生了什么。。因为statename是正确的,但是StateID显示了错误的信息

该表可能会显示:

ID      State        StateName
1       1            Attended
2       1            Attended
11      1            Attended
...

我不知道你到底需要什么,但也许是这个

select *
from StatesEquivalence EQ
full join Sales S on EQ.SalesState = S.StateId
full join Orders O on EQ.OrdersState = O.StateId

这可能是一个起点…

我认为您没有向我们展示真正的问题代码。我做了以下工作:

begin transaction

create table sales (id int, stateid int)
create table orders (id int, stateid int)
create table statesequivalence (id int, salesstate int, ordersstate int, statename varchar(20))

insert into sales values (1, 1)
insert into sales values (2, 1)
insert into sales values (3, 6)

insert into orders values (11, 2)
insert into orders values (12, 2)
insert into orders values (15, 3)

insert into statesequivalence values (1, 1, 2, 'Attended')
insert into statesequivalence values (2, 2, 3, 'Declined')

SELECT sales.ID as ID,equivalence.ID as State,equivalence.statename
FROM Sales
INNER JOIN statesequivalence as equivalence
ON sales.StateID = equivalence.SalesState
WHERE sales.ID = 1
UNION
SELECT orders.ID as ID,equivalence.ID as State,equivalence.StateName
FROM Orders as orders
INNER JOIN statesequivalence as equivalence
ON orders.StateID = equivalence.OrdersState

rollback
结果:

ID          State       statename
----------- ----------- --------------------
1           1           Attended
11          1           Attended
12          1           Attended
15          2           Declined

所以,它起作用了。你能试试上面的代码吗

以下是测试脚本和语句的输出。
也许在这里工作更容易,您可以告诉我们这个输出有什么问题

可以调整和执行testscript

输出

ID          State       StateName
----------- ----------- ---------
1           1           Attended
11          1           Attended
12          1           Attended
15          2           Declined
;WITH Sales AS (
  SELECT * FROM (VALUES
    (1, 1)
    , (2, 1)
    , (3, 6)
  ) AS Sales (ID, StateID)
)
, Orders AS (
  SELECT * FROM (VALUES
    (11, 2)
    , (12, 2)
    , (15, 3)
  ) AS Orders (ID, StateID)
)
, StatesEquivalence AS (
  SELECT * FROM (VALUES
    (1, 1, 2, 'Attended')
    , (2, 2, 3, 'Declined')
  ) AS StatesEquivalence (ID, SalesState, OrdersState, StateName)
)
SELECT  sales.ID as ID
        , equivalence.ID as State
        , equivalence.StateName
FROM    Sales
        INNER JOIN StatesEquivalence as equivalence ON sales.StateID = equivalence.SalesState
WHERE   sales.ID = 1
UNION
SELECT  orders.ID as ID
        , equivalence.ID as State
        , equivalence.StateName
FROM    Orders as orders
        INNER JOIN StatesEquivalence as equivalence ON orders.StateID = equivalence.OrdersState      
测试脚本

ID          State       StateName
----------- ----------- ---------
1           1           Attended
11          1           Attended
12          1           Attended
15          2           Declined
;WITH Sales AS (
  SELECT * FROM (VALUES
    (1, 1)
    , (2, 1)
    , (3, 6)
  ) AS Sales (ID, StateID)
)
, Orders AS (
  SELECT * FROM (VALUES
    (11, 2)
    , (12, 2)
    , (15, 3)
  ) AS Orders (ID, StateID)
)
, StatesEquivalence AS (
  SELECT * FROM (VALUES
    (1, 1, 2, 'Attended')
    , (2, 2, 3, 'Declined')
  ) AS StatesEquivalence (ID, SalesState, OrdersState, StateName)
)
SELECT  sales.ID as ID
        , equivalence.ID as State
        , equivalence.StateName
FROM    Sales
        INNER JOIN StatesEquivalence as equivalence ON sales.StateID = equivalence.SalesState
WHERE   sales.ID = 1
UNION
SELECT  orders.ID as ID
        , equivalence.ID as State
        , equivalence.StateName
FROM    Orders as orders
        INNER JOIN StatesEquivalence as equivalence ON orders.StateID = equivalence.OrdersState      

你真正的疑问是什么
其中sales.ID=1
与结果不匹配,同样
equivalent.ID
StatesEquivalence作为equivalence
。从您的描述和显示的查询中,我看不出有任何问题。如果生成的行来自销售或订单,是否可以发布您期望的内容并添加注释。而且,要完整。我希望结果中包含ID 15,但它不是。是的,它匹配,因此它给出了Sales表的第一行。@Juan,结果中的ID 2从何而来?和
等效
/
等效
?如果您已为我们简化了查询,则可能已删除问题代码。请确保您从“等效”别名获取ID和StateName。现在,您试图使用“等效”别名,但我看不到任何地方定义了该别名。我认为这是因为在我的销售表中,我有更多的状态,而不是等效状态table@JuanCarlosVegaNeira-那对我来说什么都不清楚。你能在测试脚本中添加一个(或多个)记录来告诉我们结果与你期望的不同吗?这不是最终结果的问题,但你已经切换了
拒绝/接受的
记录