【发布时间】:2011-10-07 19:10:11
【问题描述】:
可能重复:
SQL query help - have two where conditons in join condition
我有下表,其列如下。我已经提到了我需要的东西。我已经在这里SQL query help - have two where conditons in join condition 发布了一个链接,其中包含我一直在尝试但无法通过的链接。再次明确提出我的需要:
Book
BookId, BookName
Desk
DeskId, BookId ,DeskName
CounterParty
CPId, CpName
Trade
TradeId, Buyer, Seller
买家和卖家数据将是这样的:
Buyer Seller
B3232 B323
C32 B222
B323 C323
根据这两列中的起始字符 B 或 C,我需要加入 Book 或 CP 表来检查 id。
I need **t.TradingDeskName, b.BookName, c.CpName, t.Buyer, t.Seller.**
非常感谢任何帮助。
谢谢, 马尼
p.s : 我正在尝试通过 SQL 或 Linq to Sql 来完成这项工作。
最近的查询,但还有更多需要修复:
SELECT DISTINCT desk.Name as TradingDeskName, b.Name as Book, t.Seller, t.Buyer, c.PartyName, FROM TradingDesk AS desk
RIGHT JOIN Book as b
ON b.TradingDeskId = d.Id
RIGHT JOIN Trade as t
ON LEFT(t.Buyer, 1) = 'B' AND SUBSTRING(t.Buyer, 2, len(t.Buyer)) = b.Id
LEFT JOIN Book as b1
ON LEFT(t.Seller, 1) = 'B' AND SUBSTRING(t.Seller, 2, len(t.Seller)) = b1.Id
LEFT JOIN CounterParty as c
ON LEFT(t.Buyer, 1) = 'C' AND SUBSTRING(t.Buyer, 2, len(t.Buyer)) = c.PartyId
LEFT JOIN CounterParty as c1
ON LEFT(t.Seller, 1) = 'C' AND SUBSTRING(t.Seller, 2, len(t.Seller)) = c1.PartyId
正如我提到的,我需要: Desk.Name - B.Name - T.Seller - T.Buyer- C.PartyName
如果 T.Seller 或 T.Buyer 值以“C”开头(来自 CounterParty 表),则 C.PartyName 将具有该值,否则将为空。
通过上述查询,我在 Desk.Name、B.Name 中有空值,gettig C.PartyName 的逻辑也不起作用。
【问题讨论】:
-
我在这里给出了另一个问题的链接。一旦我能够找到答案,我将在那里发布相同的内容并将两者联系起来。
-
但您现在创建了同一问题的重复帖子。正如我所说,您应该使用更正的问题编辑您的原始帖子。
-
根据您的数据样本,
Buyer和Seller都可以是书籍。那么您的查询中的b.Name将基于哪一个? -
Book 必须先加入 t.desks,然后再加入 trade。 B.Name 将是基于买方和卖方的联合,然后将采用不同的方式。
-
@Mani: 你的意思是说同一个
Trade会在输出中出现两次,一次是Buyer书名,一次是Seller书名,然后是空的 ( NULL)CounterParty名称两次?
标签: mysql sql sql-server sql-server-2008 linq-to-sql