mysql - 根据第二个表中的值进行选择

标签 mysql sql join nodes edges

我正在使用 Gephi , 连接到 MySQL 数据库。有两个表:

Nodes 

**id | label**
----------------
   1 | a 
   2 | b
   3 | c
   4 | d

Edges 

**source | target**
----------------
       4 | 3
       1 | 2
       2 | 3
       3 | 1
       2 | 1
       2 | 4

sourcetarget(边表)的值应该对应于id(节点表)。我希望一个查询:

  1. labelb 的节点表中选择。
  2. b
  3. id2,因此从 source 的 Edges 表中选择这些值2.
  4. 现在 target 值为 3, 1, 4 其中 source2,因此从中选择这些值id3, 1, 4 的节点表。

我试过这个查询,但没有给出正确的结果:

SELECT id, label FROM nodes WHERE id IN(
   SELECT target FROM edges WHERE target In(
     SELECT id FROM nodes WHERE label = 'b'
   )
)

结果应该是这样的:

**id | label**
---------------- 
   2 | b
   3 | c
   1 | a
   4 | d

最佳答案

只需将节点表与边缘表连接两次,如下所示:

SELECT distinct n2.*
FROM nodes n1
JOIN edges e on n1.id = e.source
JOIN nodes n2 on n2.id in (e.source, e.target)
WHERE n1.label = 'b'

演示 @ SQLFiddle

关于mysql - 根据第二个表中的值进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41802902/

相关文章:

MySQL 为每个不同的列 b 从列 a 中选择所有不同的值,其中 count distinct a >1

php - 将左连接限制为返回一个结果?

MYSQL 更新语句 - 未知列

java - 如何在 jOOQ 中写入 "like ' somevalue%'?

sql - 在 WHERE 字段中使用 CASE

mysql - 我如何将 "migrate"结构从 aspnetdb.mdf 转换为 mysql 数据库

mysql - 将唯一的 mysql 记录从 prestashop 导出到 csv

sql - ORA-04071 : missing BEFORE, AFTER 或 INSTEAD OF 关键字错误

mysql - 关于SQL查询(更新记录)

mysql - 从 MySQL 中的 JOIN 表中的同一个表中提取多行