从同一个表中选择并通过子表选择一个结果集

时间:2016-07-06 19:03:11

标签: mysql sql

此设置适用于一个债务人的多个地址。我的订单表中有两个债务人字段。 debiteur_id为"默认"来自债务人表的价值。如果我们为同一个债务人选择另一个地址,则debiteur_id为空,aditional_id用来自aditional_debiteur的值与债务人相关联。我希望有人得到它。

我的桌子:

Order
id debiteur_id amount aditional_id
1  null        2      1
2  1           3      null
3  2           1      null

debtor
id name         hnr place
1  myname       10  london
2  companyName  4   Enschede

Aditional_debiteur
id debiteur_id hnr place
1  1           22  amsterdam

我想要的是将所有订单链接(直接或inderict)到debtor表中的id。这是因为订单来自同一家公司只有另一个地址。 如果我选择ID为1的debor,我会收到此订单结果:

order_id name    amount 
1        myname  2
2        myname  3 

debtor id 2的另一个结果:

order_id name         amount 
3        companyName  1 

我有这个问题:

SELECT * FROM `Order` WHERE `debiteur_id` = '1' ORDER BY `id` ASC

这会返回默认债务人地址的结果,我想用aditional_id检索其他订单(也与debituer_id链接到债务人)。

长话短说。我想从债务人表中使用特定债务人从订单表中检索所有订单。

2 个答案:

答案 0 :(得分:2)

SELECT
    o.id AS order_id
    ,d.name
    ,o.amount
    ,IFNULL(ad.hnr,d.hnr) AS hnr
FROM
    `Order` o
    LEFT JOIN Additional_debiteur ad
    ON o.aditional_id = ad.id
    AND ad.debiteur_id = 1
    INNER JOIN debtor d
    ON IFNULL(o.debiteur_id,ad.debiteur_id) = d.id
WHERE
    o.debiteur_id = 1
    OR ad.id IS NOT NULL
ORDER BY
    o.id ASC

这是一种方法。

答案 1 :(得分:0)

你只想要domain吗?

OR

注意:如果id是数字,则不应对值使用单引号。我假设ids实际上是数字的。