MySQL - 连接 - 当其他表中不存在时显示数据

时间:2016-07-29 11:41:09

标签: mysql join

我的联合工作是这样的:

patches-own[
 price 
]

to setup
  clear-all
  ask patches [
   set price 0.1 
  ]
  reset-ticks
end

to go
  ask patches [
    set price (sin ticks) + price
  ]
  tick

end

但是,这仅显示在通道和SELECT * FROM fixtures f, channel c, fixture_channel_join fcj WHERE f.matchday = '1' AND f.fixtures_id = fcj.fixture_id AND fcj.channel_id = c.id 中包含数据的行。是否可以显示来自灯具的所有数据,如果没有连接,只显示列中的空数据?

由于

3 个答案:

答案 0 :(得分:1)

使用#if (DEBUG_LEVEL > 0) printf("ITER %d\n", iter); #endif

left join

答案 1 :(得分:1)

尝试使用LEFT OUTER JOIN。

SELECT * 
FROM fixtures f
LEFT OUTER JOIN  fixture_channel_join fcj ON f.fixtures_id =fcj.fixture_id
LEFT OUTER JOIN  channel c ON fcj.channel_id = c.id
WHERE f.matchday =  '1'

答案 2 :(得分:1)

你所做的是隐式联接,即INNER JOIN。它很难阅读,有点混乱,我建议不要这样做。

您正在寻找LEFT JOINRIGHT JOINLEFT JOIN为您提供左侧的所有值,并在结果的右侧填充NULL

SELECT *
FROM fixtures f,
LEFT JOIN fixture_channel fcj ON f.fixtures_id = fcj.fixture_id
LEFT JOIN channel c ON fcj.channel_id = c.id
WHERE f.matchday = '1'

这将为您提供fixtures表中的所有值(包括那些不匹配的值),然后是fixture_channel表格中的匹配值(NULL存在没有匹配项的值),后跟channe l表中的匹配值(NULL值,其中不存在匹配项。)

或者,RIGHT JOIN将为您提供右侧的所有值,并在左侧填充NULL

SELECT *
FROM fixtures f,
RIGHT JOIN fixture_channel fcj ON f.fixtures_id = fcj.fixture_id
RIGHT JOIN channel c ON fcj.channel_id = c.id
WHERE f.matchday = '1'

这将为您提供channel表中的所有值(包括那些不匹配的值),前面是fixture_channel表中的值(NULL值表示那些值不匹配任何频道),前面是fixture表格中的值(夹具值不匹配灯具的NULL值)。向后退一步说明它是从右到左。

有关加入here的更多信息,请附上插图:)