【问题标题】:How to use mysql subquery with a where clause in a where clause that requires data from the superquery如何在需要来自超级查询的数据的 where 子句中使用带有 where 子句的 mysql 子查询
【发布时间】:2013-02-26 20:20:38
【问题描述】:

我要试试这个:

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

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

【问题讨论】:

  • 看起来你真的想要一个连接谓词而不是笛卡尔积,例如:LEFT JOIN _BestellungsPosition bp ON bp.OrderID = Bestellung.BNr

标签: mysql subquery where-clause


【解决方案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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • NM... Blaise 的查询效率更高。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多