1

这是一个简单的问题,所以我会保持简短:

如果我有以下 SQL 查询:

SELECT * FROM keywords WHERE * = ?

这可以用作搜索功能吗?假设表关键字的每一行都有 10 或 20 个“关键字”,这会找到其中包含?的所有行吗?

本质上,星号可以用于 SQL 查询中的任何值吗?

更新:我计划的表是这样的:

 -----------------------------------------------------
|ID |keyword1 |keyword2 |keyword3 |keyword4 |keyword5 |
 -----------------------------------------------------
|5  |blablaa2 |blablaa3 |bla blaa4|bl abla?5| blablaa6|
 -----------------------------------------------------

由于对“维护和性能”的担忧,我正在考虑这个:

------------
|ID|Keyword|
|5 |blablaa|
|3 |blablaa|
|5 |blablaa|
|2 |blablaa|
|1 |blablaa|
------------

然后我的 SQL 查询将是:

SELECT * FROM keywords WHERE keyword = ?

在两者上,ID将在另一个表中引用,并且关键字将主要用于搜索该表。

4

2 回答 2

1

不在 MySQL 中。您可以在 SQLFiddle 上对其进行测试:http ://sqlfiddle.com/#!2/5d394/1 。

我从未见过人们使用通配符作为列名。我怀疑是否有任何 RDBMS 允许它。

您可以做的是创建一个名为关键字的表格,其中列出了表格中每一行的关键字。您可以对该表进行内部联接并搜索 KEYWORD=?。

于 2013-09-07T04:37:34.523 回答
1

首先,答案是否定的,但如果您将其更改为:

SELECT * FROM keywords WHERE column_name LIKE '%?%'

应该工作

其次,从您的问题中不清楚表格是如何构建的。如果是这样的:

 -----------------------------------------------------
|column1 |column2 |column3 |column4 |column5 |column6 |
 -----------------------------------------------------
|blablaa1|blablaa2|blablaa3|blablaa4|blabla?5|blablaa6|
 -----------------------------------------------------
...

那么我之前写的答案将不起作用并且设计不好,应该每行替换一个关键字。另一种方法是按如下方式查询表:

SELECT * FROM keywords WHERE column1 LIKE '%?%' OR 
column2 LIKE '%?%' OR 
column3 LIKE '%?%' OR 
...

但是,正如我刚才提到的,这不是构建表格的好方法,您最好考虑如何重新设计它以获得更好的性能和维护。

于 2013-09-07T04:47:43.810 回答