【问题标题】:Mysql `AND` operatorMysql `AND` 运算符
【发布时间】:2014-04-22 15:07:57
【问题描述】:

美好的一天! 我对该查询有一些问题:

SELECT `id`
FROM `test`
WHERE `name`
LIKE "somename" AND `id` = (SELECT max(`id`) FROM test)

它返回一个空结果。

但是

SELECT `id`
FROM `test`
WHERE `name` LIKE "somename"

有效。

此外,

SELECT `id`
FROM `test`
WHERE `id` = (SELECT max(`id`) FROM test)

也可以。

为什么他们不一起工作?

谢谢!

【问题讨论】:

  • 它不起作用,因为someone 也没有表格中最高的id
  • 你注意到在第一个查询中得到任何结果只是因为两个条件一起工作
  • 答案中没有提到的是您的查询根本不应该“工作”。您对列名使用了单引号,因此它们被解释为字符串文字。 对字符串和日期常量使用单引号,从不使用列名或表名。
  • 是的。现在我明白了。谢谢!

标签: mysql sql pymysql


【解决方案1】:

我想你可能正在寻找这样的东西:

SELECT *
FROM
  test
WHERE
  id=(SELECT max(id) FROM test WHERE name LIKE "somename")

这将返回 test 中具有最大 ID 的行,其中 name 类似于“somename”

【讨论】:

    【解决方案2】:

    因为它们必须同时为真。

    想象一下

    id    name
    1     'somename'
    2     'someothername'
    

    以上情况

    SELECT `id`
    FROM `test`
    WHERE `name` LIKE "somename"
    

    将返回第一行但是:

    SELECT id FROM test WHERE id = (SELECT max(id) FROM test) 
    

    将返回第二个。使用AND 将意味着不返回任何结果。您可能希望使用OR,具体取决于您想要的行为。

    【讨论】:

      【解决方案3】:

      试试看:

        SELECT `id`
        FROM `test`
        WHERE id in (SELECT max(id) FROM test WHERE name LIKE '%somename%') 
      

      【讨论】:

        猜你喜欢
        • 2019-07-26
        • 1970-01-01
        • 2017-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多