我有3个表:订单,客户和供应商
结构和数据:
================================
OrdNo, OrdDt, OrdType, CSID
--------------------------------
1 01/04/2011 C 2
2 01/04/2011 S 1
--------------------------------
----------
CID, CName
----------
1 John
2 Boby
----------
=========
SID, SName
----------
1 Tony
2 Mohan
----------
如果OrdTYpe =“C”,则从Customers表中选择CSID = CID的数据 如果OrdTYpe =“S”,则从Suppliers表中选择CSID = SID
的数据如何列出
等记录--------------------------------------
OrdNo, OrdDt, OrdType, CSID CSName
--------------------------------------
1 01/04/2011 C 2 Boby
2 01/04/2011 S 1 Tony
--------------------------------------
答案 0 :(得分:4)
这会得到你想要的吗?
SELECT ordno, orddt, ordtype, csid,
COALESCE( c.name, s.name ) csname
FROM orders o
LEFT JOIN customer c ON o.ordtype='C' AND c.cid = o.csid
LEFT JOIN suppliers s ON o.ordtype='S' AND c.sid = o.csid
至少在Oracle中,另一种可能性是:
SELECT ordno, orddt, ordtype, csid,
CASE WHEN ordtype='C' THEN (SELECT name FROM customer WHERE cid = csid)
WHEN ordtype='S' THEN (SELECT name FROM suppliers WHERE sid = csid)
END csname
FROM orders;
答案 1 :(得分:1)
订单
========================
OrdNo, OrdDt, CSID
------------------------
1 01/04/2011 2
2 01/04/2011 1
-------------------------
的ClientID
---
ID
---
1
2
3
4
---
客户
----------
CID, CName
----------
1 John
3 Boby
----------
商
=========
SID, SName
----------
2 Tony
4 Mohan
----------
这样你就得到了类似的东西:
-------------------------------
OrdNo, OrdDt, CSID CSName
-------------------------------
1 01/04/2011 2 Tony
2 01/04/2011 1 John
-------------------------------
通过回溯(现在)唯一ID,您将能够判断它是客户还是供应商......我也非常确定您的SQL将以此路线运行得更快(不要抱着它虽然)。如果您喜欢这个想法,我可以查看SQL来支持它。
答案 2 :(得分:0)
SELECT o.[OrdNo], o.[OrdDt], o.[OrdType], o.[CSID],
CASE WHEN o.[OrdType] = 'C'
THEN c.[CName]
ELSE s.[SName]
END as [CSName]
FROM Orders AS o
LEFT JOIN Customers AS c
ON o.[CSID] = c.[CID]
LEFT JOIN Suppliers AS s
ON o.[CSID] = s.[SID]