mysql 连接查询 - QUERY

标签 mysql sql join

我有两张表,一张是论文,一张是尝试。我想要做的是显示论文列表以及特定候选人对每篇论文所做的尝试

查询是

SELECT 
  p . * , 
  GROUP_CONCAT( a.attempt_id ORDER BY a.date_time DESC ) AS ATT_ID
FROM papers AS p 
LEFT JOIN attempts AS a ON p.prod_id = a.paper_id 
WHERE (a.user_id =15 OR a.user_id IS NULL) 
GROUP BY p.prod_id 

该查询部分地工作,它将显示客户端未尝试过的所有论文,但如果客户端尚未尝试但另一个已尝试过,则不会显示该论文,因此如果论文 2 的尝试在attempts 表,另一个客户端的用户 id 15 尚未尝试论文 2,则论文 2 不会出现在列表中...

提前致谢。

最佳答案

当没有记录时,外部联接仍然会为您提供记录。然而,对于纸张 2,没有任何外连接,因为找到了一条记录(针对用户 14)。稍后,在 WHERE 子句中,您删除该记录,因为您说您只想保留用户 15 或 null。

将条件移至 ON 子句以使其按需要工作。

SELECT 
  p . * , 
  GROUP_CONCAT( a.attempt_id ORDER BY a.date_time DESC ) AS ATT_ID 
FROM papers AS p 
LEFT JOIN attempts AS a ON p.prod_id = a.paper_id and a.user_id = 15
GROUP BY p.prod_id 

关于mysql 连接查询 - QUERY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31201107/

相关文章:

mysql - 使用 where 子句删除重复项

mysql - 为什么这个复杂的删除 SQL 查询不起作用?

sql - 使用预定义的值顺序交替选择列值

php - 7 个带有内连接的查询到 1 个查询,mysql

c# - 上传到数据库然后验证或验证每一行然后上传到数据库

PHP和MYSQL根据日期查找记录

mysql - 将 MD5 哈希密码从一个 MySQL 传输到另一个

mysql - 如何对多个表进行 SQL Join(FK 表具有循环结果共享 ID)

没有键/索引的 MYSQL 连接表

sql - 如何在 MySQL 中执行 FULL OUTER JOIN?