Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止MySQL中左连接与内部连接的重复_Mysql_Sql_Join_Left Join - Fatal编程技术网

防止MySQL中左连接与内部连接的重复

防止MySQL中左连接与内部连接的重复,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,这是我的sql。如果matches\u times表中存在重复条目,则无法过滤查询中的重复项 SELECT info.user_id, info.name, info.age, info.gender, DATE_FORMAT(likes.time, '%c/%e/%y') AS matchedTime, DATE_FORMAT(matches_times.proposed_time, '%b %d, %Y @ %h:%i %p') AS proposedTime,

这是我的sql。如果matches\u times表中存在重复条目,则无法过滤查询中的重复项

SELECT
  info.user_id,
  info.name,
  info.age,
  info.gender,
  DATE_FORMAT(likes.time, '%c/%e/%y') AS matchedTime,
  DATE_FORMAT(matches_times.proposed_time, '%b %d, %Y @ %h:%i %p') AS proposedTime,
    matches_times.agreed
FROM info
INNER JOIN likes
  ON info.user_id = likes.liked_user_id
  AND likes.user_id = ?
LEFT JOIN matches_times
  ON (info.user_id = matches_times.user_id_1 OR info.user_id = matches_times.user_id_2)
  AND (matches_times.user_id_1 = ? OR matches_times.user_id_2 = ?)
WHERE likes.liked_user_id IN (SELECT
  user_id
FROM likes
WHERE likes.liked_user_id = ?)
ORDER BY
    CASE 
      WHEN matches_times.proposed_time IS NULL THEN likes.time 
      WHEN matches_times.proposed_time IS NOT NULL THEN matches_times.proposed_time
    END DESC
三个表格如下:

喜欢 信息 比赛时间 编辑:

这里描述了这个问题


一个简单的方法是基于这样一个事实,即您可以使用具有distinct(o等效视图)的子选择

在选择中,参考t.U时间

如果您需要max,则不需要distinct,但需要group by,例如:

LEFT JOIN (

    select  user_id_1, user_id_2,  max(DATE_FORMAT(proposed_time, '%b %d, %Y @ %h:%i %p')) as proposed_time
    from matches_times
    group by user_id_1, user_id_2

) t  ON (info.user_id = t.user_id_1 OR info.user_id = t.user_id_2)
  AND (t.user_id_1 = ? OR t.user_id_2 = ?)

mysql或sql server?请参阅提供一些示例数据以及该示例数据的预期结果。感谢您的帮助。虽然“字段列表”中的“未知列”匹配了\u次。建议的\u次,现在没有错误,但仍然得到与我的pic相同的结果,但是我得到了这个错误。我是错过了什么,还是我只是个傻瓜?你有两个不同的时间,所以你得到了两排。。你可能需要这个的最大值或最小值。。然后你只得到一行你能举个例子吗?我不确定我是否100%@lazyboy78答案更新。。希望我的回答有用(至少)
id(pk) | user_id | name | age | gender | timestamp
id(pk) | user_id_1 | user_id_2 | proposed_time | agreed | timestamp
LEFT JOIN (

    select distinct user_id_1, user_id_2,  DATE_FORMAT(proposed_time, '%b %d, %Y @ %h:%i %p') as proposed_time
    from matches_times

) t  ON (info.user_id = t.user_id_1 OR info.user_id = t.user_id_2)
  AND (t.user_id_1 = ? OR t.user_id_2 = ?)
LEFT JOIN (

    select  user_id_1, user_id_2,  max(DATE_FORMAT(proposed_time, '%b %d, %Y @ %h:%i %p')) as proposed_time
    from matches_times
    group by user_id_1, user_id_2

) t  ON (info.user_id = t.user_id_1 OR info.user_id = t.user_id_2)
  AND (t.user_id_1 = ? OR t.user_id_2 = ?)