我正在尝试使用连接从SQLite数据库中提取一组记录,从而避免在一列中出现重复。问题如下:我有两个表,Table_A在Table_B中对同一行有多个“Names”,但我只需要第一个名称(按Table_A.Id排序)。所以,在下面的例子中,我只想在结果中使用Alfa和Gamma。
以下是一个例子:
表_A
Id bId Name
----- ------ ----
1 1 Alfa
2 1 Beta
3 2 Gamma
4 2 Delta
表-B
Id Year Title
----- ------ ------
1 1900 Doctor
2 1920 Priest
我正在寻找的结果是,
bId Name Year Title
------ ------ ----- ------
1 Alfa 1900 Doctor
2 Gamma 1920 Priest
显而易见的联接如下:
Select bID, Name, Year, Title from Table_A as a join Table_B as b on b.id=a.bid
order by bId;
返回以下数据,包括我不需要的beta和delta。
bId Name Year Title
----- ------ ------ ------
1 Alfa 1900 Doctor
1 Beta 1900 Doctor
2 Gamma 1920 Priest
2 Delta 1920 Priest
如果我将查询更改为
Select bID, Name, Year, Title from Table_A as a join Table_B as b on b.id=a.bid
group by bId order by bId;
然后我得到类似这样的结果也是错误的(我得到Beta& Delta而不是Alfa& Gamma)
bId Name Year Title
----- ------ ------ ------
1 Beta 1900 Doctor
2 Delta 1920 Priest
哪个也不好。
我试图通过查看语法和使用Google来找到如何在SQLite中执行此操作,并且无法找到答案。将不胜感激任何帮助。
答案 0 :(得分:0)
如果您有SQLite 3.7.11或更高版本,则可以使用MIN或MAX选择返回组中的哪条记录。
在此查询中,将MIN(A.Id)
添加到SELECT子句。
答案 1 :(得分:0)
SELECT bID, Name, Year, Title
FROM Table_A AS A INNER JOIN Table_B AS B on B.id = A.bid
WHERE NOT EXISTS (SELECT * FROM Table_A WHERE bid = A.bid AND id < A.id)
ORDER BY bId;
这会过滤结果,仅保留对于相同id
值无法找到较低bid
值的记录。性能不高,但对于非庞大的表格,它可能足以满足您的需求。
可替换地:
SELECT bID, Name, Year, Title
FROM Table_A AS A INNER JOIN Table_B AS B on B.id = A.bid
WHERE id = (SELECT MIN(id) FROM Table_A WHERE bid = A.bid)
ORDER BY bId;