Mysql 需要帮助思考两个表上的半复杂查询吗
我有两个表,我想创建一个SELECT,根据另一个表中的多条记录从一个表中提取一条记录 如果我只举一个例子,也许会更清楚 表格:日期。字段:dosID、personID、name、dateInMysql 需要帮助思考两个表上的半复杂查询吗,mysql,sql,select,Mysql,Sql,Select,我有两个表,我想创建一个SELECT,根据另一个表中的多条记录从一个表中提取一条记录 如果我只举一个例子,也许会更清楚 表格:日期。字段:dosID、personID、name、dateIn 1 | 10 | john smith | 2013-09-05 2 | 10 | john smith | 2013-01-25 表格:卡片。字段:cardID、personID、cardColor、cardDate 1 | 10 | red | 2013-09-05 2 | 10 | orang
1 | 10 | john smith | 2013-09-05
2 | 10 | john smith | 2013-01-25
表格:卡片。字段:cardID、personID、cardColor、cardDate
1 | 10 | red | 2013-09-05
2 | 10 | orange | 2013-09-05
3 | 10 | black | 2013-09-05
4 | 10 | green | 2013-01-25
5 | 10 | orange | 2013-01-25
所以我想要的是,如果一个人没有收到“红色”卡片,那么只从dates表中选择一条记录。最接近我的是:
SELECT name, dateIn FROM dates, cards
WHERE dates.personID = cards.personID AND cardColor != 'red' AND dateIn = cardDate;
但对于这一查询,2013-09-05的服务日期仍将被取消,因为当天给出了“橙色”和“黑色”卡片
我尝试过搜索,但我甚至不知道如何正确描述这个问题,所以我的谷歌fu让我失望。任何帮助或建议都将不胜感激。最容易理解的版本将使用
不存在进行过滤。
:
SELECT name, dateIn
FROM dates
WHERE NOT EXISTS(
SELECT *
FROM cards
WHERE cards.personID = dates.personID
AND cards.cardDate = dates.dateIn
AND cards.cardColor = 'red'
)
请继续观看。我有点困惑,您将返回非红色的2013-09-05行 我尝试使用内部连接(正如您所写的)和外部连接。同样的结果 编辑: 对不起,误解了你的帖子。
eggyal的答案在我看来似乎是个赢家。上面的查询有什么问题吗?基本上,如果一个人那天被发给了“红牌”,我根本不希望“日期”表中的日期出现,但我当前的select查询将输出9月5日3个日期中的2个,而只需忽略带有“红牌”的日期。我想要的是从9月5日起没有记录显示是否有红牌…听起来你想要这个人想要的。看看你是否能适应这个:@Steve需要花更多的时间看这个-谢谢!尝试了你的代码,这似乎是工作!我想我需要多读一些关于不存在的东西,因为我很难准确地理解它,但是你给了我一个很好的方向!非常感谢。@user2573020:请参阅