如何将mysql子查询与where子句中的where子句一起使用,该子句需要来自superquery的数据

时间:2013-02-26 20:20:38

标签: mysql subquery where-clause

我要试试这个:

SELECT
    Bestellung.ID BNr,
    RechnAddr Kunde,
    (SELECT
        Name
     FROM `User`
     WHERE ID = Bestellung.SalesPerson) Verkaeufer,
    Clerk Sachbearbeiter,
    (SELECT
         Ort
     FROM `Location`
     WHERE ID = Bestellung.Location) Standort,
    CONCAT_WS('.', LPAD(Day, 2,'0'), LPAD(Month, 2,'0'), Year) Erstelldatum 
FROM `Bestellung`
WHERE
    SalesPerson != ''
AND
    (SELECT COUNT(*) cnt FROM _BestellungsPosition bp
     WHERE bp.OrderID = Bestellung.BNr) = 0

我只想要所有没有订单商品的订单,但mysql告诉我'where子句中的'未知列'Bestellung.BNr'... 我使用子查询错了吗?!

请帮帮我


编辑:我将之前使用的(伪)查询更改为真实查询,因为我的伪查询有效,但真实数据的真实数据没有


edit2:现在我将查询更改为:

SELECT
    Bestellung.ID BNr,
    RechnAddr Kunde,
    (SELECT
        Name
     FROM `User`
     WHERE ID = Bestellung.SalesPerson) Verkaeufer,
    Clerk Sachbearbeiter,
    (SELECT
         Ort
     FROM `Location`
     WHERE ID = Bestellung.Location) Standort,
    CONCAT_WS('.', LPAD(Day, 2,'0'), LPAD(Month, 2,'0'), Year) Erstelldatum 
FROM `Bestellung` LEFT JOIN _BestellungsPosition bp
WHERE
    SalesPerson != ''
AND
    bp.Order IS NULL

并且它有效...感谢响应者提供此提示,但他删除了我认为的答案

2 个答案:

答案 0 :(得分:1)

edit2:现在我将查询更改为:

SELECT
    Bestellung.ID BNr,
    RechnAddr Kunde,
    (SELECT
        Name
     FROM `User`
     WHERE ID = Bestellung.SalesPerson) Verkaeufer,
    Clerk Sachbearbeiter,
    (SELECT
         Ort
     FROM `Location`
     WHERE ID = Bestellung.Location) Standort,
    CONCAT_WS('.', LPAD(Day, 2,'0'), LPAD(Month, 2,'0'), Year) Erstelldatum 
FROM `Bestellung` LEFT JOIN _BestellungsPosition bp
WHERE
    SalesPerson != ''
AND
    bp.Order IS NULL

并且它有效...感谢响应者提供此提示,但他删除了我认为的答案

答案 1 :(得分:0)

您需要在子查询中指定要选择(或排除)的ID,这可能效率低下。请尝试以下方法:

SELECT
    ID, Customer, SalesPerson, Clerk, Date
FROM `Order`
WHERE ID NOT IN
    (SELECT DISTINCT OrderID FROM OrderItem);