【问题标题】:MySQL query JOIN with 2 tables and multiple entriesMySQL 查询 JOIN 与 2 个表和多个条目
【发布时间】:2015-06-15 18:22:53
【问题描述】:

我正在尝试执行 MySQL JOIN 查询以从两个表中获取内容。

这就是表 A 的样子:

表 A

ID  |  ISBN   |  Type
----------------------
12  | 0338566 | book
15  | 6656565 | post
16  | 9435644 | book
20  | 8525446 | book

还有表 B

ID  |  tableA_id  |    Key      |  Value
---------------------------------------------
1   |     12      |    Author   |  John Doe
2   |     12      |    Title    |  Book Title 1
3   |     16      |    Title    |  Book Title 2
4   |     20      |    Author   |  John Doe
5   |     20      |    Title    |  Book Title 3

我正在尝试构建我的 SQL 语句来输出所有书籍数据,例如:

ISBN    |    Author    |    Title
-------------------------------------
0338566 |   John Doe   | Book Title 1
9435644 |              | Book Title 2
8525446 |   John Doe   | Book Title 3

在查找 SQL JOIN 语句后,我想到了:

SELECT tableA.ISBN, tableB.value
FROM tableA, tableB  
WHERE tableA.ID = tableB.tableA_id AND tableA.type = “book” AND  (tableB.key = "title" OR tableB.author = "store_selector" )

查询只返回 2 列,因为我只引用 tableB.value 一次,即使我需要获取其中的两个值(标题和作者)。

我将如何正确构建此查询?

【问题讨论】:

  • 我建议您正确构建数据库而不是查询。将AuthorTitle 列添加到tableB
  • @umka 这实际上是 Wordpress 在 wp_posts 表和 wp_postmeta 表中存储帖子数据的方式。

标签: php mysql sql join


【解决方案1】:

也许不是解决此问题的最佳方法,但我会使用别名加入 tableB 两次并根据需要选择值,如下所示:

SELECT tableA.ISBN, author.value as Author, title.Value as Title
FROM tableA
left join tableB author 
    on tableA.ID = author.tableA_id  
    and author.key = "Author"
left join tableB title 
    on tableA.ID = title.tableA_id 
    and title.key = "Title"
where tableA.type = “book”

PS:这个数据模型看起来很糟糕,我宁愿更新它并将标题和作者存储在两个不同的表中

【讨论】:

  • 这实际上是 Wordpress 在 wp_posts 表和 wp_postmeta 表中存储帖子数据的方式。不幸的是,这不是我的数据模型。
  • 这个选择背后可能是有原因的 :) 让我知道该查询是否适合您。
  • PhpMyAdmin 给我以下错误:#1054 - '字段列表'中的未知列'author.value'。没有名为 author 的表...这是为什么呢?
  • 在这种情况下,author 是别名,而不是表。在您的模型中,Value 用大写字母 V 标出,而您的错误消息表明您写了一个小写字母 v,这可能是此错误的原因
  • 与大写 V 相同的问题。所以上面的语句是我的 Wordpress 表的压缩版本......我可以向你展示我正在使用的真实查询......它是:
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多