简体   繁体   English

SQLITE INNER JOIN错误的结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM