mysql - MySQL 尝试从两个不同的表获取数据时获取重复记录

标签 mysql distinct

我正在做一个 MySQL 查询,它必须返回表中的所有记录并动态添加两列,一列从其他表中获取值,最后一个值正在评估其他表中是否存在记录并返回 true 或 false取决于它。

让我更好地解释一下:

我有一个表,用于存储有关书籍的信息(bookid、bookname、bookdescription),该表中没有任何重复的记录。 我有第二个表,它存储用户和这些书籍之间的关系(它存储对书籍的引用、对用户 ID 的引用(如果这本书是默认书籍)以及对书籍的评级)

这就是我的查询现在的样子:

SELECT DISTINCT b.*,
  IF(ub.ub_bookid is not NULL AND ub.ub_userid = :userid , ub.ub_default, 0) AS "default",
  IF(ub.ub_bookid is not NULL AND ub.ub_userid = :userid , True, False) AS "visible"
FROM `books` as b LEFT JOIN `users_books` as ub
ON ub.ub_bookid = b.b_id;

(Since I am doing the query from PHP with PDO the value :userid is given at the execution time)

上面的查询假装从 book 表中返回所有书籍,并且对于每本书,查看表 users_books 中是否有给定 userid 的记录,如果存在,它将返回默认值并返回在“事件”列中为 true。如果记录不存在,它将返回 false,默认为 false,“active”为 false。

我的问题:当我与同一本书有超过 2 个关系但用户不同时,查询将返回重复的条目。如果我删除DISTINCT,如果同一本书有多个记录(但用户 ID 明显不同),查询将返回重复的条目。

我不太确定如何只返回与书籍表一样多的记录并避免重复它们。我一直在尝试使用 GROUP BY 来实现此目的,但无法做到这一点,因为当我使用它时查询失败。

任何建议或帮助将不胜感激。非常感谢。

最佳答案

类似的东西(不确定我完全理解你想要什么)?

SELECT b.*,
    IF(ub.ub_bookid IS NOT NULL, ub.ub_default, 0) AS 'default',
    IF(ub.ub_bookid IS NOT NULL, True, False) AS 'visible'
FROM books b
LEFT JOIN users_books ub ON b.b_id = ub.ub_bookid AND ub.ub_userid = :userid

关于mysql - MySQL 尝试从两个不同的表获取数据时获取重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763017/

相关文章:

mysql - 当我更新多对多关系中的实体时,如何阻止 Hibernate/JPA 删除连接表记录?

PHP脚本不会查询数据库

MySQL count(distinct(email) 和 Group By DATE(entrydate)

sql - 在不同的不同行上获取 sum() MySQL

php - 如何获取特定日期的最新数据? [MySQL]

MySQL 在结果集中添加缺失的月份

python - 将 JSON 值插入 mysql 但插入的是 0

python - py.test : ImportError: No module named mysql

sql - 如何在 CTE 或子查询中引用 DISTINCT 列名称?

mongodb 计数并删除重复值