【问题标题】:MYSQL select query with two tables - never giving result带有两个表的 MYSQL 选择查询 - 从不给出结果
【发布时间】:2012-04-05 07:13:08
【问题描述】:

我需要从一个表中获取一组不在另一个表中的行(它将超过 70k 条记录)。

Table1 : 记录数将超过 14000k 表2:记录数将超过110k

所以我的 SQL 查询是

SELECT  pre.`id` , pre.`deal_id` , pre.`coupon_code` , pre.`csv` 
FROM `customerorders` AS oc, `precoupon` AS pre 
WHERE oc.`uniqueid` != pre.`coupon_code` 

问题是它永远无法完成。

它一直在加载,最后在 phpmyadmin 上出现了一个白页,我收到了这条消息。

内存耗尽——无论我在 ini_set 中的大小如何,PHP 都会出现致命错误

SSH 很长时间没有结果。

查询是否有任何问题,或者是否有任何优化的查询?

如果 table1 中的特定列不可用,我需要导出这些第二个表记录。

请帮助我。提前致谢

【问题讨论】:

    标签: mysql mysql-management


    【解决方案1】:

    试试这样的左连接:

    SELECT
         pre.`id` ,
         pre.`deal_id` ,
         pre.`coupon_code` ,
         pre.`csv`
    FROM `precoupon` AS pre
    LEFT OUTER JOIN `customerorders` AS oc
        ON oc.`uniqueid` = pre.`coupon_code`
    WHERE oc.uniuqueid IS NULL
    

    【讨论】:

    • 您好,谢谢,WHERE oc.uniuqueid IS NULL 有什么原因吗?让我现在试试。
    • 嗨,它给了我一个很长的结果集,即使自从它的连接查询以来没有那么多可用的结果集,我怎么能只得到不在记录中。
    • @ela 我将 != 更改为 a = ...。如果为 null,您可以选择所有未加入的记录!
    • 这是我一直使用的方法。它简单明了,并且通常在服务器中也可以很好地优化。我发现它比使用子查询更干净,但这可能只是一种习惯,因为我认为 SQL 引擎非常擅长解决这些问题。当然,IS NULL 是有原因的。这个查询的意思是“显示来自 precoupon 的所有记录,没有 任何 customerorders 记录”
    • 还有一个问题,如果我需要公共记录,那么查询将如何?
    【解决方案2】:

    试试这样的:

    SELECT  id , deal_id , coupon_code, csv 
    FROM precoupon
    WHERE coupon_code not in (select uniqueid from customerorders)
    

    使用完整的产品不是一个好主意:-)

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      相关资源
      最近更新 更多