2017-05-23 1 views
0
가입

내가 파이썬에서 다음 SQLite는 코드가 : 그것은 어디 항목 1 두 = 'A'에서 'Asfoor','a','b','c' 'deek','a','x','v' 를 반환해야합니다 있도록이 항목 1 =의 항목 2 만 레코드를 반환해야SQLite는 INNER 잘못된 결과

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 ") 

을 대신에 점점 더 좋아지고 있습니다. 'bata','k','o','p' 'wiza','q','w','e' 여기서 item1은 다른 값을가집니다. 왜 나는 잘못된 결과가 계속 나오는 지 이해할 수 없습니다.

그것은 다음과 같이 행동해야하지만 난하지 않습니다 https://i.stack.imgur.com/0GQmm.png

전체 출력 : 나는 당신의 결과를 복제 할 수 없습니다입니다 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

+0

https://i.stack.imgur.com/0GQmm.png처럼 동작해야합니다. –

답변

0

:

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')] 

은 경기 때마다 a.item1 = b.item1 있습니다 .

+0

나는 실제 위치를 모르는 경우 자동으로 수행되기를 원합니다. item1의 가치, item1 = item1의 결과 만 얻으려고합니다. –

+0

일치 항목을 얻을 수 있지만 'bata', 'k', 'o', 'p' 'wiza', 'q', 'w' e '를 결과로도 –

+0

전체 출력을 질문에 붙여 넣을 수 있습니까? – bernie

-1

는이

SELECT DISTINCT a.*,b.* FROM OB AS a INNER JOIN OB AS b ON a.item1=b.item1

그것은 당신이 시도 테이블의 별칭을 해결하십시오. 튜토리얼이나 문서를보고 싶을 수도 있습니다 SQLite aliasing

+0

예 나는 별칭을 사용하므로 item1 = item1과 행을 비교할 수 있습니다. –

+0

알지만 코드에 'AS'문이 없습니다. – tuergeist

+2

두 구문 모두 잘 작동합니다. –