mysql - SQL 查询不返回唯一结果。我需要使用哪种类型的联接?

标签 mysql sql

我正在尝试运行以下 MySQL 查询:

SELECT * 
FROM user u 
JOIN user_categories uc ON u.user_id = uc.user_id 
WHERE (uc.category_id = 3 OR uc.category_id = 1)

它目前返回:

Joe,Smith,60657,male
Joe,Smith,60657,male
Mickey,Mouse,60613,female
Petter,Pan,60625,male
Petter,Pan,60625,male
Donald,Duck,60615,male

如果用户同时属于这两个类别,则当前返回它们两次。如何在不使用 SELECT DISTINCT 的情况下只返回一次用户,而不管他们属于多少个类别?

最佳答案

你需要一个半连接。这可以通过子查询来实现。

SELECT * 
FROM user u 
WHERE EXISTS(SELECT * 
       FROM user_categories uc 
       WHERE u.user_id = uc.user_id AND  
       uc.category_id IN(1,3))

在 MySQL 中,子查询的性能存在很大问题,但是通过 DISTINCTGROUP BY 进行的 JOIN 和重复消除可能性能更好。

关于mysql - SQL 查询不返回唯一结果。我需要使用哪种类型的联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774158/

相关文章:

python - 改进SQL INSERT查询以避免sql注入(inject)

sql - 在事务中保留自增 ID

php - 检索查询中的相似项目

java - 为什么我的上层函数在 MySQL Workbench 中有效,但在 Java/JDBC 中无效

php - MySQL 填充空日期

sql - Postgres - 具有 WHERE AND 条件的单列上的多个条件?

sql - WHERE 子句返回错误记录

mysql - 如何在具有索引的 MySQL 数据库中存储 APNS/FCM 的推送设备 token ?

php - 使用bindValue()的PDO查询方法似乎不起作用

mysql - 检查插入数据的完整性 - sqlite3