【问题标题】:MYSQL. Extract data with column filteredMYSQL。使用过滤列提取数据
【发布时间】:2013-12-30 04:16:56
【问题描述】:

我有一张这样的桌子:

mysql> select * from users;
+--------+----------+------------+-----------+
| userid | username | password   | privilege |
+--------+----------+------------+-----------+
|      1 | user1    | password   |         1 |
|      2 | david    | goodboy    |         1 |
|      3 | admin    | mastermold |         5 |
|      4 | user4    | password4  |         1 |
|      5 | user5    | password5  |         2 |
|      6 | user6    | password6  |         1 |
|      7 | user7    | password7  |         1 |
+--------+----------+------------+-----------+
7 rows in set

现在,如何通过没有存储“密码”的唯一选择查询提取名为“大卫”的用户名的密码,结果在一个字段中。 (不接受“select * from users”)?

【问题讨论】:

标签: mysql


【解决方案1】:

试试

select password from users where username='david';

【讨论】:

  • 它违反了规则,因为它在查询中有一个单词“密码”
  • 这里的“违反规则”是什么意思
  • @NidhishKrishnan 选择查询不包含密码
  • 那么 select * from users where username='david';
  • Yes.select 查询不包含“密码”
【解决方案2】:

不使用提及“密码”? 好吧,您可以将列名抓取到一个变量中并像这样使用它sqlFiddle

SET @columnName = (SELECT COLUMN_NAME FROM
                   INFORMATION_SCHEMA.COLUMNS
                   WHERE TABLE_NAME = 'users' 
                   AND ORDINAL_POSITION = 3);
SET @sql = CONCAT("SELECT ",@columnName," FROM users WHERE username = 'david'");
prepare statement FROM @sql;
execute statement;

【讨论】:

  • Tin Tran,单选查询。你的解决方案是 4
  • 这是一种棘手的作业,您的教授让您思考而不是找到解决方案吗?
  • @TinTran,既然可以转义列名,为什么还要进行动态查询?
  • 我不知道。这就是我需要你帮助的原因。因为我认为这是不可能的。但是..也许有人有一个好的解决方案?
  • @Rahul 因为 OP 说不能包含“密码”,密码不是保留字,你不需要转义它。
【解决方案3】:

好吧,你的意思是,如果我没记错的话,你的查询结果不应该有字符串“密码”。即使我发布了答案,您也应该考虑@MarcB 评论并首先尝试学习 SQL。

你的查询应该是这样的

select `password` from users where username='david' 
and lower(`password`) not like '%password%';

【讨论】:

  • 拉胡尔。你不懂我的意思。我的意思是:查询不接受“密码”字符串。
  • @jackvn,这就是我转义密码列的原因,因为password 将是保留关键字。你用 backtique 来逃避它。只需在我的答案中运行提供的查询,看看它是否有效。
  • @拉胡尔。您的查询存储“密码”字符串。规则不接受它。
  • @jackvn,现在明白了。在这种情况下,我看到的解决方案是使用 TinTran 给出的解决方案并使用columns ordinal position,即使从未建议过。可能,您可以选择synonyms,但 mysql 不支持。
  • 好吧,我想是的。我正在寻找新的方式
猜你喜欢
  • 1970-01-01
  • 2022-07-30
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2020-06-17
  • 2013-01-17
  • 2018-11-22
相关资源
最近更新 更多