2013-08-29 60 views
0

我使用SQL 2008 R2SQL參加特別喜歡在

我有一個表的順序

ORDER_ID LABEL QUAINTITY IS_CLOSED 
1  oooo 5   true 
2  pppp 6   true 
3  oooo 5   true 
4  iiii 9   false 

表COMMANDE

COMMAND_ID THE_ODER 
1   1_3 
2   2 

我想要什麼

ORDER_ID LABEL QUAINTITY THE_ODER 
1  oooo 5   1_3 
2  pppp 6   2 
3  oooo 5   1_3 
4  iiii 9   

怎麼能我把這兩張桌子聯合起來?

不知何故等,其中ODER.ORDER_ID在COMMAND.THE_ORDER

我知道這不是一個很好的架構和暴力的規範。但我必須處理它。

+0

看來你試圖把多個值到一個字段,通過分離器來存儲鏈接1:一對多或多對一:很多。這是數據庫架構中的常見錯誤。改爲使用鏈接表。 –

+0

您使用的數據庫是? –

+0

我使用SQL 2008 R2 – user1958628

回答

1

首先,order是表壞名。這是一個SQL保留字。 orders會更好。

你可以用一個神祕的連接做到這一點。基本上,尋找order_idthe_oder名單:

select o.ORDER_ID, o.LABEL o.QUAINTITY, c.THE_ODER 
from "order" o left outer join 
    commande c 
    on instr('_'||c.the_oder||'_', '_'||cast(o.order_id as varchar2(255))||'_') > 0 

以上使用的字符串連接的Oracle語法,並找到一個字符串。不幸的是,您不能輕鬆使用like,因爲'_'like的通配符。

編輯:

在SQL Server中,你會怎麼做:

select o.ORDER_ID, o.LABEL o.QUAINTITY, c.THE_ODER 
from "order" o left outer join 
    commande c 
    on charindex('_'+cast(o.order_id as varchar(255))+'_', '_'+c.the_oder+'_') > 0 
+0

謝謝你,但是你有SQL 2008 R2而不是Oracle嗎? – user1958628

0

在這個例子中,而不是一個定界的一組值要檢查,你應該只是有一個鏈接表來存儲中的值應該是這個樣子:

表COMMANDE

COMMAND_ID ODRER_ID 
1   1 
1   3 
2   2 

從這裏您可以加入此表以檢索您需要的信息。

+0

我知道這是最好的方法,但我已經得到了這樣的數據。所以我必須處理它。 – user1958628

0

試試這個:

select order_id,label,quantity 
from orders 
left join 
select * from command 
on orders.orderID=command.commandid