2013-04-23 69 views
0

我有一个sql查询,我想添加另一个条件,但我似乎无法得到它的工作。该查询很简单:mySQL查询得到的记录不匹配

SELECT DISTINCT monthly_returns.company_id 
     FROM monthly_returns, paidreturns 
     WHERE monthly_returns.company_id = paidreturns.company_id 
     AND paidreturns.month = '$cdate' 
     AND paidreturns.paid =0 

但是我想从那些尚未在paidreturns对于给定日期的所有记录monthly_returns得到记录也。我知道这将是这样的

SELECT * 
FROM monthly_returns 
WHERE monthly_returns NOT IN (SELECT * FROM paidreturns WHERE paidreturns.month = '$cdate') 

paidreturns.paid = 0时,由票据尚未支付,但如果同样存在于paidreturns该日期,然后该法案也没有支付任何记录。

架构

paidreturns表

-id

-company_id

-paid

个月的

-total

monthly_returns表

-id

-company_id

-wage_totals

个月的

+0

您可能会考虑使用'LEFT JOIN'将'paidreturns'加入'monthly_returns'。无论“paidreturns”中是否有匹配的行,这将返回所有'monthly_returns'。 http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins – showdev 2013-04-23 21:02:27

回答

1

试试这个:

SELECT 
    DISTINCT monthly_returns.company_id 
FROM 
    monthly_returns 
LEFT JOIN 
    paidreturns 
    ON monthly_returns.company_id = paidreturns.company_id 
     AND monthly_returns.month = paidreturns.month 
WHERE 
    monthly_returns.month = '$cdate' 
    AND 
     (
     paidreturns.paid = 0 
     OR 
     paidreturns.company_id IS NULL 
     ); 

使用LEFT JOIN,您可以找到monthly_returns中的所有记录,无论它们是否与paidreturns中的条目匹配。

然后,通过将paidreturns.company_id IS NULL添加到WHERE子句中,可以在查询中包含那些不匹配的条目。

+0

我收到错误:SQLSTATE [42S22]:未找到列:1054'where子句'中未知列'paidreturns' – 2013-04-23 21:07:55

+0

我刚刚更新了它,但在架构上仍然有点模糊。你可以从'DESC paidreturns;'和'DESC monthly_returns;'发布你的输出吗? – 2013-04-23 21:09:31

+0

感谢您的帮助,现在的SQL运行,但总是给零记录我会张贴计划 – 2013-04-23 21:19:34

0
select company_id 
from 
(
(

SELECT DISTINCT monthly_returns.company_id 
    FROM monthly_returns, paidreturns 
    WHERE monthly_returns.company_id = paidreturns.company_id 
    AND paidreturns.month = '$cdate' 
    AND paidreturns.paid =0 
) 
union 
(


SELECT company_id 
FROM monthly_returns 
WHERE monthly_returns NOT IN (SELECT * FROM paidreturns WHERE paidreturns.month = '$cdate' 
) 
) as x 
+0

你可能想改变工会的第二部分,使内部加入付款返还paidvalue = 0 – Val 2013-04-23 21:03:20

+0

感谢您的重播,我得到你有你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第20行'as x'附近使用正确的语法 – 2013-04-23 21:21:00