【问题标题】:SQL Query: do I need two queries or can I use a nested subquerySQL 查询:我需要两个查询还是可以使用嵌套子查询
【发布时间】:2013-12-13 21:39:33
【问题描述】:

这个问题以前可能有人问过,但我真的不知道用什么词来搜索。

我有一个 mysql 数据库,它有一个包含 3 列 [ID、fieldName 和 fieldValue] 的表,用于描述另一个表中对象的属性。 ID 字段存储另一个表中对象的外键,fieldName 和 fieldValue 存储标题、描述、文件大小和摘要等内容。

我正在尝试编写一个查询,该查询返回其中 fieldName 和 fieldValue 对匹配已知值并且返回的行 ID 在另一行中有另一个不同的 fieldValue 的行。现在我用两个查询和一个 if 语句来完成它。这是 sudo 代码:

$result = SELECT * FROM table_a WHERE fieldName = 'title' and fieldValue = 'someTitle'
$test = SELECT * FROM table_a WHERE fieldValue = 'someValue' and id = '{$result['id']}'
if ($test) {
  /* Result Found */
}

【问题讨论】:

  • 两者都没有 - 鉴于您展示的示例,您将永远不会得到任何结果。 table_a.fieldValue 不能同时等于 'someTitle' 和 'someValue'。请展示实际示例以获得帮助。您可能需要一个联接,或者只是一个基本查询,具体取决于您实际尝试执行的操作。
  • fieldName 和 fieldValue 是两个不同的列,它们可以同时具有不同的值
  • 但是 fieldValue 被使用了两次。看看你写的查询。您实际上是在做:WHERE fieldName = 'title' and fieldValue = 'someTitle' and fieldValue = 'someValue',它永远不会返回任何行。 (where a=1 and b=2 and b=3) 因此,我建议您向我们展示一些真正的价值观。
  • 不,两条 SQL 语句是单独的查询。第一个用于获取ID号,第二个用于查看具有该ID的记录在fieldValue中是否具有一定的值。
  • 你真的看不出问题吗?向我们展示真实的列名。我意识到您正在运行两个查询。但是,如果您选择其中 fieldName = 'title' 和 fieldValue = 'someTitle' 的行,并且假设它的 ID 为 5。然后您选择 where id = 5 和 fieldValue = 'someValue',您将永远不会返回一行。

标签: php mysql sql


【解决方案1】:

您可以自行加入表格:

SELECT * FROM table_a AS s1 
JOIN table_a AS s2 USING (id)
WHERE
    s1.fieldName = 'Title' AND s1.fieldValue = 'someTitle'
    AND s2.fieldValue = 'someValue'

【讨论】:

    【解决方案2】:

    你说的用sql翻译的应该是:

    SELECT b.* 
    FROM table_a a
    INNER JOIN table_a b ON a.id = b.id
    WHERE a.fieldName = 'title'
      AND a.fieldValue = 'someTitle'
      AND a.fieldValue <> b.fieldValue
    

    这将为您获取 table_a 中的行,这些行与具有您预定义值的行具有相同的 id,但具有不同的 fieldValue。这假设 id 不是主键,否则不会有另一行具有相同的 id,但在您的问题中看起来情况并非如此。 (如果你想检查一个特定的值,你可以这样做:AND b.fieldValue = 'someValue' 在最后一行)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多