2011-03-13 77 views
3

也许我有一个不好的设计,但我目前正在尝试 得到一个小型商店的订购系统和运行。因为它是 礼品订单可以让发件人和收件人显示订单的来往地点。
因此,我们有表选择两个参考表

Person 
personid 
name 
address 

Order 
Sender_personid 
Receiver_personid 
etc... 

我无法创建一个SQL语句的顺序来选择两个人的名字和地址。如果这可以做任何指针会很好。如果没有任何设计指针同样令人赞叹的话。

回答

7

我想你想是这样的:

SELECT 
    SP.*, 
    RP,*, 
    O.* 
FROM Order O 
JOIN Person SP ON SP.PersonID = O.Sender_PersonID 
JOIN Person RP ON RP.PersonID = O.Receiver_PersonID 

在桌子上刚刚加入的两倍。

+0

这工作很好,谢谢.. – BastanteCaro 2011-03-13 17:49:32

2

基本上你只是做同样的事情,就好像你只想得到1个人(比如只有接收者),但是这次你加入了这个表格两次。表别名可以帮助理解

SELECT receiver.name, sender.name 
FROM order o, person as receiver, person as sender 
where o.sender_personid = receiver.personid 
and o.sender_personid = sender.personid 
+0

为什么不显式连接语法? – 2011-03-13 17:41:12

+2

如果您更改为JOIN(自1992年以来推荐的SQL语法),我会加注。 – gbn 2011-03-13 17:41:16

+1

@Martin - 也就是说,它只是ANSI-89。但我同意,我一般不会投票赞成,只是ANSI-92。 – 2011-03-13 17:42:11