2017-04-27 10 views
0

試圖執行匹配4個變量的選擇查詢,其中一個查詢標題中的字符串。如何用python遊標類執行LIKE語句?或另一種方式?使用Python遊標類與LIKE語句執行多匹配查詢

stmt = "SELECT * FROM publication NATURAL JOIN journal NATURAL JOIN authors WHERE name = ? AND year = ? AND booktitle = ? AND title LIKE '%%%s%%'" % (input_names, input_year, input_booktitle, input_string) 
print(stmt) 
cur.execute(stmt) 

編輯:表模式

%%sql 
DROP TABLE IF EXISTS publication; 
CREATE TABLE publication(
    ID INT PRIMARY KEY NOT NULL, 
    title VARCHAR NOT NULL 
); 

/* Author Entity set and writes_for relationship */ 
DROP TABLE IF EXISTS authors; 
CREATE TABLE authors(
    name VARCHAR(200) PRIMARY KEY NOT NULL, 
    ID INT, 
    title VARCHAR(200), 
    FOREIGN KEY(id, title) REFERENCES publication(ID, title) 
); 

/* Journal Entity set and apart_of relationship */ 
DROP TABLE IF EXISTS journal; 
CREATE TABLE journal(
    booktitle VARCHAR(200) PRIMARY KEY NOT NULL, 
    pages INT, 
    year INT(4), 
    ID INT, 
    title VARCHAR(200), 
    FOREIGN KEY(ID, title) REFERENCES publication(ID, title) 
); 
+0

https://en.wikipedia.org/wiki/Where_(SQL)#LIKE – jarlh

+0

@jarlh我知道語法的,不符合這個'cur.execute工作()'函數 – douglasrcjames

+0

所以喜歡是不是問題? – jarlh

回答

1

我想,真正的問題是,你正在做的加入,你不從告訴它從哪裏拿的列(從表) 。

你可以請嘗試添加表嗎? 我不知道它會幫助,但讓我們嘗試(因爲也許你沒有在這些表中相同的列名稱)

那樣?

stmt = "SELECT * FROM publication NATURAL JOIN journal NATURAL JOIN 
authors WHERE authors.name = ? AND journal.year = ? AND 
journal.booktitle = ? AND journal.title LIKE  
'%%%s%%'" % (input_names, input_year, input_booktitle, input_string) 
print(stmt) 
cur.execute(stmt) 

第二件事: 您應該使用'%s'而不是'?'

stmt = "SELECT * FROM publication NATURAL JOIN journal NATURAL JOIN 
authors WHERE authors.name = '%s' AND journal.year = '%s' AND 
journal.booktitle = '%s' AND journal.title LIKE  
'%%%s%%'" % (input_names, input_year, input_booktitle, input_string) 
print(stmt) 
cur.execute(stmt) 
+0

試過了那段代碼,它沒有工作,我調整了一下,因爲標題屬於日誌表。我剛剛在一個編輯中附加了我的表格模式! – douglasrcjames

+0

請參閱我的編輯(關於'?')。我看到了模式。請確保你添加到所有列他們的右表 – TzlilPha

+0

對不起,添加他們後,我發表評論哈哈 – douglasrcjames