查询以检索表之间不存在的值

时间:2016-04-15 14:06:39

标签: php mysql sql

我需要检索另一个表中不存在的值。我正在使用SharesShare_types表格。

目前,我使用PHP,但我总是在Share_types的2,500行中循环,我认为可以通过查询来解决行数。

用户目前正在执行此过程:

  1. 选择共享类型 - Anual share
  2. 选择要提取的年份 - 2016
  3. 代码将生成所有共享,直到2016尚未生成的年份。这意味着,2016背后的年代如果不存在,也会产生。
  4. 那就是说,我的PHP代码如下:

    // Retrieves always the 2,500~ rows
    $listOfShareTypes = "SELECT user_id, date_start FROM share_types WHERE type = 'Anual share'";
    
    foreach($listOfShareTypes as $type)
    {
       // Now is where I validate if the share already exists
       $hasShare = "SELECT COUNT(*) FROM shares WHERE the_year = $yearSelectedByUser, user_id = $type->user_id, share_type_id = $type->id";
    
       if($hasShare == TRUE)
          continue;
       else
          // Create the share..
    }
    

    通常情况下,要通过查询检索另一个表中不存在的结果,我会在查询中执行两次select,但经过几次搜索后,它指向使用{{1} }。但是我不知道如何完成这个,因为我需要匹配几个字段(user_id,share_type_id,year等)

    查看我在 SQLFiddle 上创建的示例,结果应为:

    LEFT JOIN

    使用此结果并且由于用户选择(5, 3, 'Anual', '2015-06-28') 年,我应该从2016循环(以PHP为单位)直到2015

2 个答案:

答案 0 :(得分:2)

您在join条件中使用了错误的列。表格应加在user_id上。

SQL Fiddle

SELECT stype.id, stype.user_id, stype.type, stype.date_start
FROM share_types AS stype
LEFT JOIN shares AS share ON share.user_id = stype.user_id
WHERE share.share_type_id IS NULL

答案 1 :(得分:0)

尝试此查询

SELECT user_id, date_start FROM share_types st,shares sh on sh.share_type_id=st.user_id   WHERE  type = 'Anual share' and sh.user_id=st.id and sh.the_year=$yearSelectedByUser and  Having COUNT(sh.user_id) < 1;