问题:
查找其关键字包含该书籍的书籍组的最后3个字符的书籍的标题。卡里姆"
我想这样做:
SELECT Title
FROM Lib_Book
WHERE BookKeywords LIKE '%(SELECT BookGroup FROM Lib_Book WHERE BookId=(SELECT BookId from Lib_Booking, Lib_Borrower WHERE Lib_Booking.BId=Lib_Borrower.BId AND Lib_Borrower.BName = 'Mr. Karim'))%';
从%到最后的部分返回给我一个答案,即编程'。所以我需要将BookKeyword表示为'%ing%'。我怎样才能做到这一点?
**表格很大所以我在这里写的那些......如果有人需要那些plz lemme知道...... thnx
答案 0 :(得分:0)
你有基本的概念,虽然不可能在SELECT
条款中处理LIKE
语句(而且我可能会拍摄允许这样做的RDBMS开发者 - 它是为SQL注入打开巨大的漏洞。此外,您可能会遇到多个结果的问题,因为您的“查询”在Karim先生借了多本书的那一刻就会失败。
我可能首先尝试使用连接运行(哦,永远不要使用隐式连接语法):
SELECT d.title
FROM Lib_Borrower as a
JOIN Lib_Booking as b
ON b.bId = a.bId
JOIN Lib_Book as c
ON c.bookId = b.bookId
JOIN Lib_Book as d
ON d.bookKeywords LIKE '%' + SUBSTRING(c.bookGroup, LENGTH(c.bookGroup) - 3) + '%'
WHERE a.bName = 'Mr. Karim'
请注意以下警告:
Lib_Booking
时,您可能需要包含某种限制性条件。bookKeywords
似乎可能类似于多值列(需要示例数据)。如果是这样,您的表格结构需要进行修订。SUBSTRING()
或RIGHT()
将无法在加入bookGroup
列时使用inidicies。鉴于您的要求,您可以做的事情并不多...... bookGroup
列是依赖于语言的解析文本)。您可以通过创建Book_Group
表,Keywords
表和交叉引用Book_Keywords
表以及加入数字ID来获得更好的服务。您可能还需要语言键控Book_Group_Description
和Keyword_Description
表。这个将占用更多空间,可能需要更多的处理时间(增加的连接数,尽管文本处理可能更少),但会增加灵活性和“安全性”。 / LI>
醇>