2012-03-30 63 views
0
SELECT DISTINCT monthly_returns.company_id 
     FROM monthly_returns LEFT JOIN paidreturns ON monthly_returns.company_id = paidreturns.company_id 
     WHERE NOT EXISTS (SELECT * FROM paidreturns WHERE paidreturns.company_id = monthly_returns.company_id 
     AND paidreturns.month = '$cdate' and paidreturns.paid = 1) 

表结构:需要从MySQL表值,其中某些条件不存在

CREATE TABLE IF NOT EXISTS `paidreturns` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `company_id` int(11) NOT NULL, 
    `paid` tinyint(1) NOT NULL, 
    `month` date NOT NULL, 
    `total` decimal(9,2) NOT NULL, 
    PRIMARY KEY (`id`) 
) 

CREATE TABLE IF NOT EXISTS `monthly_returns` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
    `company_id` int(11) NOT NULL, 
    `employee_id` int(11) NOT NULL, 
    `pay_week1` decimal(9,2) unsigned DEFAULT NULL, 
    `pay_week2` decimal(9,2) unsigned DEFAULT NULL, 
    `pay_week3` decimal(9,2) unsigned DEFAULT NULL, 
    `pay_week4` decimal(9,2) unsigned DEFAULT NULL, 
    `pay_week5` decimal(9,2) unsigned DEFAULT NULL, 
    `pay_weeks` int(1) unsigned DEFAULT NULL, 
    `month` date NOT NULL, 
    PRIMARY KEY (`id`) 

我试图让尚未支付这个月的回报公司的名单。 我正在使用'NOT EXISTS'来达到这个目标,但是我仍然收到一家退货的公司,该公司已经为本月支付了回报。 任何帮助表示赞赏...

+0

你的问题还是有点暧昧,并请提供什么VS你想要什么样的一些数据。此外,您每月返回的非规范化数据显示每个可能的每周最多5个月,可能会导致未来的问题。现在回到问题。您是否提供查询的“日期”,或者您是否希望CURRENT DATE的月份始终成为基础。 Per Soaica的回答是,如果该月不存在记录,则不要返回任何内容......不存在.. Monthly_Returns或PaidReturns? – DRapp 2012-03-31 02:47:50

回答

1

试试这个:

SELECT DISTINCT 
     monthly_returns.company_id 
    FROM 
     monthly_returns 
     LEFT JOIN paidreturns 
      ON monthly_returns.company_id = paidreturns.company_id 
      AND paidreturns.month = '$cdate' 
      and paidreturns.paid = 1 
    WHERE 
     paidreturns.company_id IS NULL 
+0

如果用户在所选月的payreturns表中有条目,那么该功能正常工作。如果某个月的记录不存在,它将返回付费退货表中的所有条目。这第二种行为不是我所需要的。如果所选月份中不存在任何记录,那么我不希望返回任何内容... – 2012-03-30 15:03:50

+0

您可以向您的问题添加2表结构吗? – 2012-03-30 15:12:20

+0

添加了表结构... – 2012-03-30 15:51:47

相关问题