Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
sqlite中有没有一种优雅的方法来选择自联接中的单个列?_Sql_Sqlite - Fatal编程技术网

sqlite中有没有一种优雅的方法来选择自联接中的单个列?

sqlite中有没有一种优雅的方法来选择自联接中的单个列?,sql,sqlite,Sql,Sqlite,这是一个不起作用的示例查询,因为我只能选择“mindate.rID”或“maxdate.rID”,或者它给了我一个“amiguous column name-error”,即使其中一个可能是我需要的条目。我看到的唯一解决方法是使用“SELECT*”,但必须有一种更优雅的方法来解决它,不是吗?对于SQLite,如果两个列都由表的名称/别名限定,则可以选择它们: SELECT mindate.rID FROM (SELECT rID, mID, count(mID), min(ratingD

这是一个不起作用的示例查询,因为我只能选择“mindate.rID”或“maxdate.rID”,或者它给了我一个“amiguous column name-error”,即使其中一个可能是我需要的条目。我看到的唯一解决方法是使用“SELECT*”,但必须有一种更优雅的方法来解决它,不是吗?

对于SQLite,如果两个列都由表的名称/别名限定,则可以选择它们:

SELECT mindate.rID
FROM
    (SELECT rID, mID, count(mID), min(ratingDate), stars
    FROM rating
    GROUP BY rID, mID
    HAVING count(mID) >1) 
AS mindate,
    (SELECT rID, mID, count(mID), max(ratingDate), stars
    FROM rating
    GROUP BY rID, mID
    HAVING count(mID) >1) 
AS maxdate
WHERE mindate.stars > maxdate.stars
如果您遇到这样的问题,我怀疑它与SQLite无关,而是与您运行此查询所使用的工具或编程语言有关。
在任何情况下,最好不要在结果中使用相同名称的两列,因此您应该为它们别名:

SELECT mindate.rID, maxdate.rID
见a.

如果希望根据某些条件仅返回两列中的一列,请使用CASE表达式:

SELECT mindate.rID minID, maxdate.rID maxID
选择CASE WHEN,然后选择mindate.rID ELSE maxdate.rID END

请提供样本数据和所需结果。您的查询格式不正确,因为
groupby
键与
SELECT
列不匹配。可能有一种更简单的方法来做你想做的事情。@GordonLinoff sqlite允许这样做-看看你的查询应该做什么?请详细说明。表的唯一键是什么?
SELECT CASE WHEN <condition> THEN mindate.rID ELSE maxdate.rID END