mysql - 获取用户未对 SQL 查询投票的所有配置文件

标签 mysql sql

profiles:
+--------+
id
name
surname

voted:
+--------+
id
profileid
targetid

我有一个包含用户配置文件的表和另一个我跟踪谁对谁投票的表。 (profileid 是选民的个人资料 ID,targetid 是被投票人的个人资料 ID)

我愿意:

获取当前用户(例如 ID 为 1)投票(也不包括他自己)的所有个人资料。

我试过这个:

SELECT profiles.name,profiles.surname,voted.targetid 
FROM profiles 
JOIN voted 
ON profiles.id = voted.profileid
WHERE profiles.id != 1 # exclude self

看直播fiddle在这里,这不起作用,因为我不确定如何形成 JOIN。

如何才能做到这一点?

最佳答案

这里有一个方法:

SELECT 
  profiles.name,
  profiles.surname
FROM profiles 
LEFT JOIN voted 
  ON profiles.id = voted.targetid
  AND voted.profileid = 1 /* <- your param here */
  AND voted.profileid != voted.targetid 
    /* has not voted for him/herself */
WHERE voted.profileid is null

结果如下:http://sqlfiddle.com/#!9/80a6b/14

之所以有效,是因为 LEFT JOINWHERE 子句相结合。

JOIN 查找配置文件已投票的人(不包括自己投票),WHERE 选择与之相反的人(其中 LEFT JOIN 带来空值)。

请注意,我从输出中抑制了 targetid 列,因为我认为它没有意义(我们正在寻找投票存在的对) .

关于mysql - 获取用户未对 SQL 查询投票的所有配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489432/

相关文章:

mysql - 如何在 MySQL 数据库中生成一堆假用户

sql - 在 SQL (Postgres) 中作为 JSON 对象数组返回

MySQL select date BETWEEN 语法打印错误结果

mysql - MySQL Web 应用程序的安全性良好 : Root? 不是 Root?

PHP - 计算在 foreach 中显示了多少结果

mysql - SQL Server聚合函数查询

MySQL 选择不同但仅当所有第二列 = 1 时?

java - 无法从 java jdbc 更新 oracle sql 数据库中的一行,java 代码停留在更新

php - 更新查询以使用连接表

mysql - 在 MySQL 中构建一个大表