【问题标题】:MySQL multiple values join to one table - better query?MySQL 多个值连接到一个表 - 更好的查询?
【发布时间】:2015-01-02 12:56:20
【问题描述】:

有可能更好地解决这个任务吗?

我有两个 mysql 表。

1) z_import_kategorie
id - kategorieHOME - kategoriePP - kategorieP
1  - 2             - 3          -  5
2  - 2             - 4          -  8
3  - 2             - 6          -  7

2) tm_category_lang
id_category - name - lang_id
2           - HOME - 1
2           - Uvod - 2
3           - Bikes - 1
3           - Kola - 2
4           - Windows - 1
4           - Okna - 2
5           - Cars - 1
5           - Auta - 2
6           - Wheels - 1
6           - Disky - 2
7           - Lights - 1
7           - Svetla - 2
8           - Doors - 1
8           - Dvere - 2

我需要在单个查询中将表 z_import_kategorie 中的 kategorieHOME、kategoriePP 和 kategorieP 加入表 tm_category_lang 中的类别名称。

我的查询是:

SELECT z.*,k1.name AS katHOME,k2.name AS katPP,k3.name AS katP 
FROM z_import_kategorie AS z 
LEFT JOIN tm_category_lang AS k1 ON(k1.id_category = z.kategorieHOME) 
LEFT JOIN tm_category_lang AS k2 ON(k2.id_category = z.kategoriePP) 
LEFT JOIN tm_category_lang AS k3 ON(k3.id_category = z.kategorieP) 
GROUP BY z.id 
ORDER BY z.id ASC

RESULT of query is:

1 - HOME - Bikes - Cars
2 - HOME - Windows - Doors
3 - HOME - Wheels - Lights

是否可以更好地设计此查询?我的查询正在运行,但我认为这不好。

谢谢。

【问题讨论】:

  • 如果不使用聚合操作,分组有什么意义?
  • 没有比这更简单的写法了。这是正确的方法,只是你不需要GROUP BY

标签: mysql sql select join left-join


【解决方案1】:

您无需在查询中使用 GROUP BY 来获取类别名称,因此请将其删除,然后您的查询就会起作用。

试试这个:

SELECT z.*, k1.name AS katHOME, k2.name AS katPP, k3.name AS katP 
FROM z_import_kategorie AS z 
LEFT JOIN tm_category_lang AS k1 ON k1.id_category = z.kategorieHOME AND k1.lang_id = 1
LEFT JOIN tm_category_lang AS k2 ON k2.id_category = z.kategoriePP AND k2.lang_id = 1
LEFT JOIN tm_category_lang AS k3 ON k3.id_category = z.kategorieP AND k3.lang_id = 1
ORDER BY z.id ASC

【讨论】:

  • 我需要 GROUP BY,因为每个类别名称(相同的 category_id)都存在两种语言的名称,结果与第二个表中的连接数重复。
  • 我认为您的解决方案更好。谢谢你:)
  • @David 不客气...如果您找到正确的答案,那么您可以接受该答案。
猜你喜欢
  • 2010-12-28
  • 2019-02-10
  • 2012-04-12
  • 2019-04-04
  • 2021-01-14
  • 2020-04-23
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多