【问题标题】:sql query to fetch data from 5 tablessql查询从5个表中获取数据
【发布时间】:2015-03-28 08:18:26
【问题描述】:

我有下表结构。

master table >
    m_id, pk
    m_name,
    p_id, fk
    s_id, fk
    t_id, fk
    x_id fk

p table >
    p_id, pk
    p_name

s table >
    s_id, pk
    s_name

t table >
    t_id, pk
    t_name

x table >
    x_id, pk
    x_name

我想获取给定 m_id 的 m_id、m_name、p_name、s_name、t_name、x_name。

我在查询中应用内连接

SELECT mt.m_id, mt.m_name, pt.p_name, st.s_name, tt.t_name, xt.x_name
FROM master mt
    INNER JOIN p AS pt ON pt.p_id = mt.p_id
    INNER JOIN s AS st ON st.s_id = mt.s_id
    INNER JOIN t AS tt ON tt.t_id = mt.t_id
    INNER JOIN x AS xt ON xt.x_id = mt.x_id
WHERE mt.m_id = 50;

问题:是否有任何其他有效的方法来实现这一点或者我的查询没问题?

谢谢。

【问题讨论】:

  • 您的查询没问题。
  • 您的查询完全没问题。
  • 查询看起来不错。如果您正在寻找性能,您可能会从键上的索引中获益。
  • 请注意,您的解决方案假定所有外键列都存在值。
  • @NamanGala,使用左连接,因为连接链中的第一个表是主表!

标签: mysql sql select join


【解决方案1】:

您的查询绝对没问题。如果您只想更改查询,可以使用以下查询。只是我删除了别名

SELECT mt.m_id, mt.m_name, p.p_name, s.s_name, t.t_name, x.x_name
FROM master mt
    INNER JOIN p ON p.p_id = mt.p_id
    INNER JOIN s ON s.s_id = mt.s_id
    INNER JOIN t ON t.t_id = mt.t_id
    INNER JOIN x ON x.x_id = mt.x_id
WHERE mt.m_id = 50;

【讨论】:

  • 是的..!!绝对.. 伙计,我觉得如果您不使用复杂的查询,那么您可以避免使用别名。
  • 使用别名有什么缺点吗?
  • 一点也不。 :) 创建别名始终是最佳实践。我建议在这里删除它,因为您没有太多复杂的查询。
猜你喜欢
  • 2022-01-08
  • 2013-07-15
  • 2020-11-29
  • 1970-01-01
  • 2015-11-13
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多