mysql - JOIN 2 Tables 和 SELECT more cell

标签 mysql sql select join

您好,我的 mysql 有问题。我有2张 table 。

餐 table 上的工作和餐 table 上的人。

在表格工作中,我有 4 列 ID person Like

person1, person2, person3, person4, person5
  5          3       111      15       8

一定是这样。

现在我想选择具有表工作但名称为人的任何行。 首先我用这个:

JOIN person p1 ON(w.person1 = p1.id)
JOIN person p2 ON(w.person1 = p1.id)
JOIN person p3 ON(w.person1 = p1.id)
JOIN person p4 ON(w.person1 = p1.id)
JOIN person p5 ON(w.person1 = p1.id)

AND USED 选择 LIKE

SELECT p1.name, p2.name, p3.name.... 

但是如果我有很多行,比如 10000,这个查询会很慢。

如何更改为使用 1 JOIN?

最佳答案

您的 person 表未规范化,因此为了检索数据,您必须像找到的那样多次加入,或者您可以使用 UNION ALL 查询来逆透视数据。

这种类型的查询类似于:

select *
from work w
inner join
(
  select person1 p_name
  from person
  union all
  select person2
  from person
  union all
  select person3
  from person
  union all
  select person4
  from person
  union all
  select person5
  from person
) p
  on w.person1 = p.p_name

通过逆透视数据,您可以获取列并将其转换为行,这样您就可以对数据执行一次连接。

关于mysql - JOIN 2 Tables 和 SELECT more cell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524163/

相关文章:

Mysql 在现有表中插入数据。如果数据已经存在,如何自动为数据提供新的ID

mysql - 删除 MySQL 中的重复项

SQLZOO SELECT 来自诺贝尔 #14

PHP 不将数据库打印为表

mysql - 表单选择存储 ID 而不是 NAME

php - 在 MySQL 中同步两个表中的行数据的最佳方法是什么?

mysql - 我创建的以 "dotNetChat_"开头的表在重新启动 MySQL 后消失

sql - sp_send_dbmail 中的 HTML 格式

php - 如何在 MySQL 中执行 IF THEN 语句?

php - 如何使我的 HTML 表单查询同时适用于所有表单元素?