SQL语句将一个表中的两个字段组合在一起,该字段与另一表中的id元素匹配

达斯汀·格里菲斯(Dustin Griffith)

如果您熟悉Drupal,则使用2个分类术语来描述每个content_type_event节点。如果您不了解Drupal,您仍然可以在下面找到所有内容。

我构建了一个SQL Fiddle,它比我绘制的表更易于遵循和测试。小提琴的实际数据库内容与下面显示的样本信息有些不同,但是我尝试使它们尽可能相似。

我有三个表:

content_type_event:

____________________________________
| nid | field_eventstartdate_value |
------------------------------------
|  17 | 1984581600                 |
|  18 | 1984581600                 |
|  19 | 1984581600                 |
|  20 | 1984581600                 |
|  22 | 1984581600                 |
====================================

term_node:

_____________
| nid | tid |
-------------   
|  17 |   6 |   
|  17 |  15 |
|  18 |   7 |  
|  18 |  17 |
|  19 |   6 |
|  19 |  15 |
|  20 |  16 |
|  20 |   9 |
|  22 |  10 |
|  22 |  15 |
=============

term_data:

__________________________
| tid | vid |    name    |
--------------------------
|   6 |  4  | Location 1 |
|  15 |  3  |    Event 1 |
|   7 |  4  | Location 2 |
|   9 |  4  | Location 3 |
|  10 |  4  | Location 4 |
|  16 |  3  |    Event 2 |
|  17 |  3  |    Event 3 |
==========================

content_type_event表包含有关事件的信息,但是对于位置和事件类型,我必须更深入地了解。

term_node表具有所有到每个nid(节点ID)的tid(术语ID)。每个nid应该为我们的活动提供2个提示。一个提示会给我们我们的位置,另一个提示会给我们使用event_type。

term_node表提供了tid的名称,并为我们提供了一个vid来告诉该名称是event_type还是location。

我的目标是获取所有事件的nid,位置,event_type,field_eventstartdate_value。以下所有内容都是在将来开始的,因此应如下所示:

______________________________________________________________
| nid |  location  | event_type | field_eventstartdate_value |
--------------------------------------------------------------
| 17  | Location 1 |   Event 1  |                 1984581600 |
| 18  | Location 2 |   Event 3  |                 1984581600 |
| 19  | Location 1 |   Event 1  |                 1984581600 |
| 20  | Location 3 |   Event 2  |                 1984581600 |
| 22  | Location 4 |   Event 1  |                 1984581600 |
==============================================================

我对SQL不太满意。这是我到目前为止所拥有的:

SELECT event.nid, event.field_eventstartdate_value, location.name, event_type.name
FROM content_type_event AS event 
JOIN term_node ON term_node.nid = event.nid
LEFT JOIN (
  SELECT tid, name AS location FROM term_data WHERE vid = 4
) AS location ON location.tid = term_node.tid
LEFT JOIN (
  SELECT tid, name AS location FROM term_data WHERE vid = 3
) AS event_type ON event_type.tid = term_node.tid;

但这给了我:

______________________________________________________________
| nid |  location  | event_type | field_eventstartdate_value |
--------------------------------------------------------------
| 17  |       NULL |   Event 1  |                 1984581600 |
| 17  | Location 1 |      NULL  |                 1984581600 |
| 18  |       NULL |   Event 3  |                 1984581600 |
| 18  | Location 2 |      NULL  |                 1984581600 |
| 19  |       NULL |   Event 1  |                 1984581600 |
| 19  | Location 1 |      NULL  |                 1984581600 |
| 20  |       NULL |   Event 2  |                 1984581600 |
| 20  | Location 3 |      NULL  |                 1984581600 |
| 22  |       NULL |   Event 1  |                 1984581600 |
| 22  | Location 4 |      NULL  |                 1984581600 |
==============================================================

我似乎无法将这些结果分组在一起,所以每个事件只能得到一整行,而不是包含部分信息的两行。

如果需要它们,可以从中获取表build语句。

内容:SQL Fiddle

Lajos Veres

我认为您需要这样做:

SELECT
  event.nid,
  location.location,
  event_type.event_type,
  event.field_eventstartdate_value
FROM
  content_type_event AS event
LEFT OUTER JOIN (
   SELECT
      nid,
      name AS location
    FROM
      term_data JOIN
      term_node ON term_data.tid=term_node.tid
    WHERE term_data.vid = 4) AS location ON location.nid = event.nid
LEFT OUTER JOIN (
   SELECT
      nid,
      name AS event_type
    FROM
      term_data JOIN
      term_node ON term_data.tid = term_node.tid
    WHERE term_data.vid = 3) AS event_type ON event_type.nid = event.nid;

http://sqlfiddle.com/#!2/c2459/17/0

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将两个字段组合在一起并在查询中连接来自第三字段的信息

来自分类Dev

SQL-将同一表中的两个字段连接到另一个表中的单个字段

来自分类Dev

如何将一个表中的两个字段关联到另一个表中的一个字段

来自分类Dev

如何在一个字段或另一个字段中具有值的mongo和group记录中将$ group和$ or组合在一起?

来自分类Dev

如何将一个视图中的两个ModelForm与以任意顺序显示的字段组合在一起?

来自分类Dev

将两个输入字段的结果与JavaScript结合在一起?

来自分类Dev

如何取两个字符串数组来构建一个将它们组合在一起的数组?

来自分类Dev

SQL:如何根据另一个表中的相同字段创建两个字段?

来自分类Dev

如何通过将每个列表中的一个元素组合在一起,将两个不同对象的列表组合为一个列表?

来自分类Dev

一个表中的两个字段与另一个表中的一个字段相关

来自分类Dev

如何将一个表中另一个表具有多个ID的两个表联接在一起?

来自分类Dev

ElasticSearch可以将一个字段缝合在一起以显示来自字段不同部分的匹配吗?

来自分类Dev

MYSQL:将3个表中的数据混合在一起,并与另一个表进行JOIN

来自分类Dev

如何在MySQL中将两个不同的表组合在一起并排序

来自分类Dev

如何在MySQL中将两个不同的表组合在一起并对其进行排序

来自分类Dev

SQL语句-难以从一个表中产生两个字段

来自分类Dev

将两个相似的查询组合在一起

来自分类Dev

如何将两个列表组合在一起?

来自分类Dev

将两个或多个线程组合在一起

来自分类Dev

将两个IQueryable组合在一起不起作用

来自分类Dev

Python 以字母开头的行,将两个 for 循环组合在一起?

来自分类Dev

将两个 -filter_complex 命令组合在一起

来自分类Dev

在SQL Server中将两个小选择组合在一起

来自分类Dev

将 3 个大表与 2 个连接组合在一起

来自分类Dev

将两个单独的输入字段结合在一起使用php搜索

来自分类Dev

如何从两个不同的表中获取两个字段的计数,并将MySQL中另一个表中的字段分组

来自分类Dev

如何将两个SQL查询与不同的条件组合在一起?

来自分类Dev

尝试通过使用另一个表中的 id 值将两个表连接在一起

来自分类Dev

将具有多个列/名称数量的表的多个select *查询组合在一起,以导出到另一个数据库中

Related 相关文章

  1. 1

    如何将两个字段组合在一起并在查询中连接来自第三字段的信息

  2. 2

    SQL-将同一表中的两个字段连接到另一个表中的单个字段

  3. 3

    如何将一个表中的两个字段关联到另一个表中的一个字段

  4. 4

    如何在一个字段或另一个字段中具有值的mongo和group记录中将$ group和$ or组合在一起?

  5. 5

    如何将一个视图中的两个ModelForm与以任意顺序显示的字段组合在一起?

  6. 6

    将两个输入字段的结果与JavaScript结合在一起?

  7. 7

    如何取两个字符串数组来构建一个将它们组合在一起的数组?

  8. 8

    SQL:如何根据另一个表中的相同字段创建两个字段?

  9. 9

    如何通过将每个列表中的一个元素组合在一起,将两个不同对象的列表组合为一个列表?

  10. 10

    一个表中的两个字段与另一个表中的一个字段相关

  11. 11

    如何将一个表中另一个表具有多个ID的两个表联接在一起?

  12. 12

    ElasticSearch可以将一个字段缝合在一起以显示来自字段不同部分的匹配吗?

  13. 13

    MYSQL:将3个表中的数据混合在一起,并与另一个表进行JOIN

  14. 14

    如何在MySQL中将两个不同的表组合在一起并排序

  15. 15

    如何在MySQL中将两个不同的表组合在一起并对其进行排序

  16. 16

    SQL语句-难以从一个表中产生两个字段

  17. 17

    将两个相似的查询组合在一起

  18. 18

    如何将两个列表组合在一起?

  19. 19

    将两个或多个线程组合在一起

  20. 20

    将两个IQueryable组合在一起不起作用

  21. 21

    Python 以字母开头的行,将两个 for 循环组合在一起?

  22. 22

    将两个 -filter_complex 命令组合在一起

  23. 23

    在SQL Server中将两个小选择组合在一起

  24. 24

    将 3 个大表与 2 个连接组合在一起

  25. 25

    将两个单独的输入字段结合在一起使用php搜索

  26. 26

    如何从两个不同的表中获取两个字段的计数,并将MySQL中另一个表中的字段分组

  27. 27

    如何将两个SQL查询与不同的条件组合在一起?

  28. 28

    尝试通过使用另一个表中的 id 值将两个表连接在一起

  29. 29

    将具有多个列/名称数量的表的多个select *查询组合在一起,以导出到另一个数据库中

热门标签

归档