【问题标题】:Mysql Select All from one table, and some from another table Using AliasesMysql 从一个表中选择全部,从另一个表中选择一些使用别名
【发布时间】:2016-09-08 16:17:57
【问题描述】:

我发布这个问题是因为我确实找到了a similar question,但他们没有使用别名。

我有两张桌子 - 我想从 table1 获取所有内容,然后从 table2 获取 user_nameTeam

我的原始查询是从table2 获取所有内容

SELECT * 
FROM qabin.allqas t1 
JOIN login.users t2 
ON (t1.Submitter = t2.user_name) 
WHERE t1.Status='Complete'

这一切都很好,很好,工作正常,但我只想得到user_nameTeam

为了让事情更有趣,它们位于不同的数据库中,尽管这不是问题。

一个在qabin 数据库中,另一个在login 数据库中。

我试过了:

SELECT 
  qabin.allqas.* AS t1,
  login.users.Team,
  login.users.user_name
JOIN login.users t2
ON (t1.Submitter = t2.user_name)
WHERE t1.Status='Complete'

我需要 t1 和 t2 别名,因为它们在其他地方用于构建更大的查询字符串。

提前致谢!

【问题讨论】:

  • 既然您指出了另一个问题,知道您可以遵循该答案并将别名替换为表名,这很有用
  • 我试图避免这种情况,因为有很多很多行代码使用这些别名。

标签: php mysql


【解决方案1】:

为什么不使用子查询?

SELECT * 
FROM qabin.allqas t1 
JOIN (SELECT user_name, Team FROM login.users) t2 
ON (t1.Submitter = t2.user_name) 
WHERE t1.Status='Complete'

【讨论】:

  • 真棒,非常快的答案,它的工作原理:) 另外,TIL 子查询是什么。
  • 这是一种迂回的方式来完成更简单的事情。
  • 他说他后来在大型查询中使用了这个别名。如果由于某种原因他只希望此别名可以使用这两个字段,这就是您的做法。
  • 啊,你是对的。对于简单的情况,它比需要的要多,但对于更复杂的查询,你的答案很好:)
【解决方案2】:

您不能对一组列使用一个别名 (t1)。我猜你正在寻找的是这样的:

SELECT t1.*, t2.team, t2.user_name
FROM qabin.allqas t1 
JOIN login.users t2 
    ON (t1.Submitter = t2.user_name) 
WHERE t1.Status='Complete'

我建议使用 t1 中的真实列名而不是 t1.*

【讨论】:

  • 我根据发送的一堆参数构建了一个字符串,所以让我解释一下它的用途。基本上稍后出现的另一个字符串是:$queryString .= "AND t1.DateCompleted BETWEEN '$startDate' AND '$endDate' "; 我希望避免重写一堆以后的代码
  • 我对它比较陌生,但请放心,我正在转义所有帖子数据
【解决方案3】:

试试这个查询:

SELECT t1.*, t2.user_name, t2.Team
FROM qabin.allqas t1 
JOIN login.users t2 
ON t1.Submitter 1= t2.user_name
WHERE t1.Status='Complete'

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2020-08-17
    • 2016-07-22
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多