[英]SQLITE INNER JOIN Wrong results
I have the following Sqlite code on python : 我在python上有以下Sqlite代码:
cur.execute("CREATE TABLE OB (ID INTEGER PRIMARY KEY AUTOINCREMENT , Name TEXT, Item1 TEXT ,item2 TEXT,Item3 TEXT)")
cur.execute("INSERT INTO OB (name,item1,item2,item3) VALUES('Asfoor','a','b','c')")
cur.execute("INSERT INTO OB (name,item1,item2,item3) VALUES('deek','a','x','v')")
cur.execute("INSERT INTO OB (name,item1,item2,item3) VALUES('bata','k','o','p')")
cur.execute("INSERT INTO OB (name,item1,item2,item3) VALUES('wiza','q','w','e')")
con.commit()
cursor = cur.execute("SELECT DISTINCT a.*,b.* from OB a INNER JOIN OB b on a.item1=b.item1 ")
It should return only records with item1=item2 so it should return 'Asfoor','a','b','c'
'deek','a','x','v'
where item1 in both ='a' but instead i keep getting them plus getting : 'bata','k','o','p'
'wiza','q','w','e'
where item1 have different values I don't understand why i keep getting those extra wrong results. 它应仅返回具有item1 = item2的记录,因此应返回
'Asfoor','a','b','c'
'deek','a','x','v'
,其中两个项中的item1 ='a '但相反,我会不断获取它们并获取: 'bata','k','o','p'
'wiza','q','w','e'
其中item1具有我不理解的不同值为什么我总是得到那些额外的错误结果。
It should behave like this but i doesn't https://i.stack.imgur.com/0GQmm.png
它应该像这样,但我不
https://i.stack.imgur.com/0GQmm.png
Complete output: ID = 1 NAME = Asfoor Item1 = a Item2 = b Item3 = c ID = 1 NAME = Asfoor Item1 = a Item2 = b Item3 = c ID = 2 NAME = deek Item1 = a Item2 = x Item3 = v ID = 2 NAME = deek Item1 = a Item2 = x Item3 = v ID = 3 NAME = bata Item1 = k Item2 = o Item3 = p ID = 4 NAME = wiza Item1 = q Item2 = w Item3 = e
完整的输出:
ID = 1 NAME = Asfoor Item1 = a Item2 = b Item3 = c ID = 1 NAME = Asfoor Item1 = a Item2 = b Item3 = c ID = 2 NAME = deek Item1 = a Item2 = x Item3 = v ID = 2 NAME = deek Item1 = a Item2 = x Item3 = v ID = 3 NAME = bata Item1 = k Item2 = o Item3 = p ID = 4 NAME = wiza Item1 = q Item2 = w Item3 = e
I am unable to replicate your results: 我无法复制您的结果:
import pprint as pp
pp.pprint(cur.execute("""SELECT DISTINCT a.*,b.*
FROM OB a
INNER JOIN OB b
ON a.item1=b.item1;""").fetchall())
[(1, u'Asfoor', u'a', u'b', u'c', 1, u'Asfoor', u'a', u'b', u'c'),
(1, u'Asfoor', u'a', u'b', u'c', 2, u'deek', u'a', u'x', u'v'),
(2, u'deek', u'a', u'x', u'v', 1, u'Asfoor', u'a', u'b', u'c'),
(2, u'deek', u'a', u'x', u'v', 2, u'deek', u'a', u'x', u'v'),
(3, u'bata', u'k', u'o', u'p', 3, u'bata', u'k', u'o', u'p'),
(4, u'wiza', u'q', u'w', u'e', 4, u'wiza', u'q', u'w', u'e')]
There are matches every time a.item1 = b.item1
. 每次
a.item1 = b.item1
都有匹配a.item1 = b.item1
。
Try this 尝试这个
SELECT DISTINCT a.*,b.* FROM OB AS a INNER JOIN OB AS b ON a.item1=b.item1
It addresses the alias of tables you tried. 它解决了您尝试过的表的别名。 You may want to look at a tutorial or documentation about SQLite aliasing
您可能需要查看有关SQLite别名的教程或文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.