1. 程式人生 > >mysql 查詢表中不包含另一張表的資料的記錄

mysql 查詢表中不包含另一張表的資料的記錄

tabletouser表

submit 表

查詢submit表中的記錄,只需要年份(time)和表名(tab_id) ,但是如果在tabletouser表中存在相同的年份(year)和表(tabletouser)則不能從submit中提取出



開始想從 submit表中得到年和表,從tabletouser中得到年和表,從submit中去除tabletouser的記錄,但是效果不好,因為同時包含兩個欄位,開始學mysql,技術有限,沒能實現

最後,想到這個方法:
兩個表中都有年和表字段,將這兩個欄位拼成字串,形成一個標誌,然後用not in 即可查出submit中不包含tabletouser中資料的記錄

SELECT DISTINCT tab_id,DATE_FORMAT(t.`time`,'%Y') FROM tzb_submit t WHERE LEFT(t.`submit_id`,7) NOT IN (SELECT CONCAT(a.`year`,LPAD(a.`table_id`,3,0)) submit_id FROM tabletouser a)
    

字串格式化

    LPAD(a.`table_id`,3,0)《LPAD(str,length,str)》 從a.`table_id`的左邊新增0,直到字元長度為3,如果本身超過3,則從左擷取3個長度  3--》003       12-》012

字串合併
    CONCAT(str,str,..)合併兩個字串 2014+ 003——》2014003

字串擷取
    LEFT(t.`submit_id`,7)從t.submit_id的左邊開始擷取7位長度,2014003002-》2014003