【问题标题】:MySQL query for add join after check columnMySQL查询在检查列后添加连接
【发布时间】:2013-04-16 17:40:14
【问题描述】:

我创建了包含以下表格的数据库。

booking (id, user_id, user_table, date);
user (id, fname, lname);
tmp_user (id, fname, lname);

预订表的user_id 引用user 表ID 和tmp_user 表ID。我使用user_table 列来保持用户表类型。

我想编写一个查询来获取包含用户详细信息的预订详细信息。所以我应该在加入用户表之前检查user_table 列值。

有可能吗?我该怎么做?

【问题讨论】:

  • 到目前为止你有没有尝试过?
  • 我仍然不知道这样做。 :(
  • 所以基于 user_table 列你会知道加入是用户还是 tmp_user 对吗?我不明白你为什么要检查 user_table 列,即尝试从预订 b 内部加入用户 u 中选择 [cols] 在 u.id = b.user_id 上。

标签: mysql database join


【解决方案1】:

您可以通过同时加入然后使用优先级来执行这种类型的查询:

select b.*,
       (case when u.id is not null then u.fname else tu.fname end) as fname,
       (case when u.id is not null then u.lname else tu.lname end) as lname
from booking b left outer join
     user u
     on b.user_id = u.id left outer join
     tmp_user tu
     on b.user_id = tu.id

您还可以在第二个联接中添加条件and u.uid is null。我不知道这会有助于还是影响性能。

哦,如果你想要用户表的值,那只是对逻辑的一个小修改:

select b.*,
       (case when b.user_table = 'user' then u.fname else tu.fname end) as fname,
       (case when b.user_table = 'tmp_user' then u.lname else tu.lname end) as lname
from booking b left outer join
     user u
     on b.user_id = u.id left outer join
     tmp_user tu
     on b.user_id = tu.id;

【讨论】:

  • 此查询不适用于我的任务。我想检查 user_table 的值。
猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多