2012-03-30 54 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

相關問題