比方說,我有這樣的數據(請注意在第三本書空author_id
):導軌 - JOIN子句不包括一行空外鍵
Authors
-------------------------
id | name
-------------------------
1 | Susan Collins
2 | Steven Meyer
-------------------------
Books
--------------------------------------
id | author_id | title
--------------------------------------
1 | 1 | Hunger Games
2 | 2 | Twilight
3 | nil | Games of Throne
--------------------------------------
我有一個圖書搜索欄。我希望它可以通過書的標題和作者的名字進行搜索。
例如,當我搜索「蘇珊」。它將返回書名稱爲「蘇珊」或書名如「蘇珊」。
問題是:當我搜索「遊戲」時,它只返回「飢餓遊戲」。它不會選擇「王座遊戲」,因爲author_id
爲空。
我在這裏做了SQLFiddle。
這是從我的Rails代碼生成的SQL:
SELECT books.* FROM books
INNER JOIN authors ON authors.id = books.author_id
WHERE (
(LOWER(books.title) LIKE LOWER("%game%"))
OR
(LOWER(authors.name) LIKE LOWER("%game%"))
)
而且結果只返回1行: 「飢餓遊戲」。沒有「權力的遊戲」。
是否有一種方法可以包含具有空外鍵的行?
我會接受SQL查詢作爲答案,我會盡力找出自己的Rails代碼。
感謝
[編輯]
下面是生成SQL Rails代碼:(我用Squeel寶石)
search = "%#{params[:search]}%" # the query is taken from param
Books.joins(:author).where {
(lower(title) =~ lower(search)) |
(lower(author.name) =~ lower(search))
}
你確定你使用的是區分大小寫的排序規則? MySQL結果集應該是什麼樣子? – Strawberry 2014-11-04 10:12:37
是的,我已經使用'LOWER'轉換了案件,所以案件並不重要。 SQL結果只是返回「飢餓遊戲」。我將它添加到編輯 – hrsetyono 2014-11-04 10:13:44