我需要检索其他表中不存在的值。我正在处理SharesShare_types表。
目前,我使用php处理这个问题,但我总是在Share_types的2500行上循环,我认为可以用一个查询来解决行数问题。
用户当前正在经历此过程:
选择共享类型-Anual share
选择要提取的年份-2016
代码将生成所有尚未生成的共享,直到2016年。这意味着,如果不存在的话,2016的年数也将产生。
也就是说,我的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,但在几次搜索之后,它会指向LEFT JOIN的用法。但是,我不知道如何实现这一点,因为我需要匹配几个字段(用户id、共享类型id、年份等)。
看看我在SQLFiddle上创建的这个示例,结果应该是:
(5, 3, 'Anual', '2015-06-28')

有了这个结果,并且由于用户选择了2016的年份,我应该循环(在php中)从20152016

最佳答案

您在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

10-08 09:39
查看更多