Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
Sql 行号进行内部联接时出现意外结果_Sql_Postgresql_Inner Join_Row Number - Fatal编程技术网

Sql 行号进行内部联接时出现意外结果

Sql 行号进行内部联接时出现意外结果,sql,postgresql,inner-join,row-number,Sql,Postgresql,Inner Join,Row Number,我构建了这个SQL请求 SELECT distinct c_users.id, c_photos.user_id, c_photos.pic_filename, c_users.user_first_name, c_users.user_last_name, c_users.description, c_users.curriculum_diploma_1, ROW_NUMBER() OVER(OR

我构建了这个SQL请求

SELECT 
      distinct c_users.id,
      c_photos.user_id,
      c_photos.pic_filename,
      c_users.user_first_name,
      c_users.user_last_name,
      c_users.description,
      c_users.curriculum_diploma_1,
      ROW_NUMBER() OVER(ORDER BY c_users.id ASC) AS rank
FROM
    c_users
INNER JOIN
    c_photos
ON
    c_users.id=c_photos.user_id
WHERE 
    lower(location_town) LIKE '%lille%' 
    AND
    (c_photos.pic_type='profile' OR c_photos.pic_type='photo')    
LIMIT
   9 
;
这是输出

rank列有一些意外的结果,我希望它是1、2、3等等,而不是94、84、25等等。我不知道该怎么做

谢谢


Leonard

如果您希望结果按特定顺序排列,您需要一个order by。我建议:

order by c_users.id 

编辑:

我不确定行数如何与distinct一起工作。我更喜欢分组。但在你的情况下,我怀疑是否需要消除重复,除非用户有两张同名照片

SELECT u.id, p.user_id, p.pic_filename, u.user_first_name, u.user_last_name,
       u.description, u.curriculum_diploma_1,
       ROW_NUMBER() OVER (ORDER BY u.id ASC) AS rank
FROM c_users u INNER JOIN
     c_photos p
     ON u.id = p.user_id
WHERE lower(location_town) LIKE '%lille%' AND
      p.pic_type in ('profile', 'photo')
LIMIT 9 ;
您可以添加:

GROUP BY u.id, p.user_id, p.pic_filename, u.user_first_name, u.user_last_name,
         u.description, u.curriculum_diploma_1 
如果必要的话

with CTE as
(
SELECT 
      distinct c_users.id,
      c_photos.user_id,
      c_photos.pic_filename,
      c_users.user_first_name,
      c_users.user_last_name,
      c_users.description,
      c_users.curriculum_diploma_1,
      ROW_NUMBER() OVER(ORDER BY c_users.id ASC) AS rank
FROM
    c_users
INNER JOIN
    c_photos
ON
    c_users.id=c_photos.user_id
WHERE 
    lower(location_town) LIKE '%lille%' 
    AND
    (c_photos.pic_type='profile' OR c_photos.pic_type='photo')    
)
select *
from CTE
where rank <=9

将其打包到CTE/查询中并使用行号,或者按照Gordon的答案按新列排序,以使限制按预期工作。

distinct语句导致了这种情况。你可以试试这个:

SELECT *, ROW_NUMBER() OVER(ORDER BY c_users.id ASC) AS rank from (
SELECT 
      distinct c_users.id,
      c_photos.user_id,
      c_photos.pic_filename,
      c_users.user_first_name,
      c_users.user_last_name,
      c_users.description,
      c_users.curriculum_diploma_1

FROM
    c_users
INNER JOIN
    c_photos
ON
    c_users.id=c_photos.user_id
WHERE 
    lower(location_town) LIKE '%lille%' 
    AND
    (c_photos.pic_type='profile' OR c_photos.pic_type='photo')    
    ) as data
LIMIT
   9 
SELECT *, ROW_NUMBER() OVER(ORDER BY c_users.id ASC) AS rank from (
SELECT 
      distinct c_users.id,
      c_photos.user_id,
      c_photos.pic_filename,
      c_users.user_first_name,
      c_users.user_last_name,
      c_users.description,
      c_users.curriculum_diploma_1

FROM
    c_users
INNER JOIN
    c_photos
ON
    c_users.id=c_photos.user_id
WHERE 
    lower(location_town) LIKE '%lille%' 
    AND
    (c_photos.pic_type='profile' OR c_photos.pic_type='photo')    
    ) as data
LIMIT
   9