如何使用单个查询查询多个表?

用户名

我希望我的表输出这样的内容

---------------------------------------------------------------------------------------------
|  date         |  location | time  |        delegate 1         |       delegate 2          |
|--------------------------------------------------------------------------------------------
|  2015-12-07   |  Table 1  | 9:00  |  first_name_4 last_name_4 | first_name_5 last_name_5  |
|--------------------------------------------------------------------------------------------
|                           | 9:30  |  first_name_4 last_name_4 | first_name_6 last_name_6  |
|--------------------------------------------------------------------------------------------
|                           | 9:30  |  first_name_3 last_name_3 | first_name_7 last_name_7  |
|--------------------------------------------------------------------------------------------
|                           | 9:00  |  first_name_3 last_name_3 | first_name_7 last_name_7  |
|--------------------------------------------------------------------------------------------

这是我的数据库上的表

会议桌

-------------------------------------------------------------------------------------------------
|  id   |  date_id  | time_id   | location_id   | delegate_id_1 |   delegate_id_2   | status    |
|------------------------------------------------------------------------------------------------
|   1   |     1     |     1     |       1       |       4       |         5         |     A     |
|------------------------------------------------------------------------------------------------
|   2   |     1     |     2     |       1       |       4       |         6         |     A     |
|------------------------------------------------------------------------------------------------
|   3   |     1     |     1     |       1       |       2       |         6         |     P     |
|------------------------------------------------------------------------------------------------
|   4   |     1     |     2     |       1       |       1       |         3         |     A     |
|------------------------------------------------------------------------------------------------
|   5   |     1     |     1     |       1       |       1       |         3         |     A     |
|------------------------------------------------------------------------------------------------

用户表

-----------------------------------------
|  id   |  first_name   | last_name     | 
|----------------------------------------
|  1    |  first_name_1 | last_name_1   | 
|----------------------------------------
|  2    |  first_name_2 | last_name_2   | 
|----------------------------------------
|  3    |  first_name_3 | last_name_3   | 
|----------------------------------------
|  4    |  first_name_4 | last_name_4   | 
|----------------------------------------
|  5    |  first_name_5 | last_name_5   | 
|----------------------------------------
|  6    |  first_name_6 | last_name_6   | 
|----------------------------------------

位置表

-----------------------------
|  id   |  location_name    | 
|----------------------------
|  1    |  Table 1          | 
|----------------------------

时间表

-------------------------
|  id   |  meeting_time | 
|------------------------
|  1    |  9:00:00      | 
|------------------------
|  1    |  9:30:00      | 
|------------------------

日期表

-------------------------
|  id   |  meeting_date | 
|------------------------
|  1    |  2015-12-07   | 
|------------------------
|  2    |  2015-12-08   | 
|------------------------
|  3    |  2015-12-09   | 
|------------------------

我最初的查询是这样的

-- $query_date
SELECT meeting_date 
FROM dates 
WHERE meeting_date = '2015-12-07'

-- $query_location
SELECT location_name.location 
from location 
LEFT JOIN meetings 
    ON meetings.location_id=location.id 
LEFT JOIN date 
    ON meetings.date_id=date.id 
WHERE meeting_date.dates = '2015-12-07'

现在,这是我弄错了的部分。

-- $query_final
SELECT meeting_time.time, delegate1.first_name AS first_name_1,
   delegate1.last_name AS last_name_1, delegate2.first_name AS first_name_2,
   delegate2.last_name AS last_name_2 
FROM meetings 
INNER JOIN users delegate1 
    ON meetings.delegate_id_1=users.id 
LEFT JOIN users delegate2 
    ON meetings.delegate_id_2=users.id 
WHERE meetings.status='A'

我的上一个查询的结果给了我意外的结果,因为结果显示的条目比我的会议表更多。

我知道我所进行的查询非常昂贵,但我不知道如何进行更优化的查询。我什至不知道是否有可能仅将结果放入单个查询中。任何帮助都做得很好。谢谢。

lag

您可以使用正确的JOIN单个查询带回所有内容。

请注意,当您在SQL上使用列名时,语法为TABLE.COLUMN_NAME,似乎您经常在退出命令时出错...

我更改了一些表名,因为您有时s在末尾使用,而有时不使用。

由于timedate是SQL关键字,它具有更好的s无处不在

SQL小提琴

MySQL 5.6模式设置

CREATE TABLE meetings  (`id` int, `date_id` int, `time_id` int, `location_id` int, `delegate_id_1` int, `delegate_id_2` int, `status` varchar(1));
INSERT INTO meetings (`id`, `date_id`, `time_id`, `location_id`, `delegate_id_1`, `delegate_id_2`, `status`)
VALUES (1, 1, 1, 1, 4, 5, 'A'),
    (2, 1, 2, 1, 4, 6, 'A'),
    (3, 1, 1, 1, 2, 6, 'P'),
    (4, 1, 2, 1, 1, 3, 'A'),
    (5, 1, 1, 1, 1, 3, 'A');

CREATE TABLE users (`id` int, `first_name` varchar(12), `last_name` varchar(11));
INSERT INTO users (`id`, `first_name`, `last_name`)
VALUES (1, 'first_name_1', 'last_name_1'),
    (2, 'first_name_2', 'last_name_2'),
    (3, 'first_name_3', 'last_name_3'),
    (4, 'first_name_4', 'last_name_4'),
    (5, 'first_name_5', 'last_name_5'),
    (6, 'first_name_6', 'last_name_6');

CREATE TABLE locations (`id` int, `location_name` varchar(7));
INSERT INTO locations (`id`, `location_name`)
VALUES (1, 'Table 1');

CREATE TABLE times (`id` int, `meeting_time` varchar(7));
INSERT INTO times (`id`, `meeting_time`)
VALUES  (1, '9:00:00'),
    (2, '9:30:00') ;

CREATE TABLE dates (`id` int, `meeting_date` varchar(10)) ;
INSERT INTO dates (`id`, `meeting_date`)
VALUES (1, '2015-12-07'),
    (2, '2015-12-08'),
    (3, '2015-12-09') ;

查询1

-- $query_final
SELECT locations.location_name,
   `times`.meeting_time, 
   delegate1.first_name AS first_name_1,
   delegate1.last_name AS last_name_1, 
   delegate2.first_name AS first_name_2,
   delegate2.last_name AS last_name_2 
FROM meetings 

LEFT JOIN locations 
    ON meetings.location_id=locations.id 
LEFT JOIN dates 
    ON meetings.date_id=`dates`.id 
LEFT JOIN times 
    ON meetings.time_id=`times`.id 
INNER JOIN users delegate1 
    ON meetings.delegate_id_1 = delegate1.id 
LEFT JOIN users delegate2 
    ON meetings.delegate_id_2 = delegate2.id 

WHERE 
    meetings.status = 'A'
    AND dates.meeting_date = '2015-12-07'

结果

| location_name | meeting_time |   first_name |   last_name |   first_name |   last_name |
|---------------|--------------|--------------|-------------|--------------|-------------|
|       Table 1 |      9:00:00 | first_name_1 | last_name_1 | first_name_3 | last_name_3 |
|       Table 1 |      9:30:00 | first_name_1 | last_name_1 | first_name_3 | last_name_3 |
|       Table 1 |      9:00:00 | first_name_4 | last_name_4 | first_name_5 | last_name_5 |
|       Table 1 |      9:30:00 | first_name_4 | last_name_4 | first_name_6 | last_name_6 |

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

sqlite-使用单个查询查找表中是否存在多个记录

如何使用单个查询更新多个表

如何使用选择查询查找表名

使用子查询查看单个表中两个表的不同列

查询查询表Laravel

使用大查询查询表时如何屏蔽表中的指定字段?

如何使用查询查找可用日期

如何使用UNION ALL进行查询查询

如何使用Spring JDBC模板查询查询Double

使用单个查询在多个表中选择多个计数(*)

如何提高oracle查询查找引用表名的性能

如何在单个查询中从多个表中读取?

Laravel:如何查询查询范围的结果

如何编写 SQL 子查询查询

如何在SQL Server中使用单个查询在多个表中插入数据?

如何在同一存储过程中对单个表使用多个更新查询

如何使用单个查询获取存储在不同变量中的多个表行的计数?

Laravel/SQL:如何在单个查询中从多个表中获取数据?也使用'where'

使用单个查询在 Android Room 中搜索多个表

SQL如何使用单个查询替换同一表的单个字段中的多个字符

如何在Rails中查询查询结果(使用Rails和Postgres查询“ DISTINCT ON”的结果

通过单个查询从多个表返回数据

PostgreSQL在单个查询中更新多个表

单个表中有多个查询结果

如何在一个表中的单个查询上执行多个子查询?

如何使用单个连接执行多个 oracle 查询?

如果更新了,使用单个查询查找所有详细信息记录?

如何使用单个查询合并两个表

如何使用单个查询压缩表中的记录?