Mysql 从一个表中选择全部,从另一个表中选择一些使用别名

Posted

技术标签:

【中文标题】Mysql 从一个表中选择全部,从另一个表中选择一些使用别名【英文标题】:Mysql Select All from one table, and some from another table Using Aliases 【发布时间】: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 别名,因为它们在其他地方用于构建更大的查询字符串。

提前致谢!

【问题讨论】:

既然您指出了另一个问题,知道您可以遵循该答案并将别名替换为表名,这很有用 我试图避免这种情况,因为有很多很多行代码使用这些别名。 【参考方案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'

【讨论】:

以上是关于Mysql 从一个表中选择全部,从另一个表中选择一些使用别名的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]

基于从另一个表中选择的值进行限制

从一个表中选择,从另一个 id 链接的表中计数

MySQL 在从另一个表中选择时插入到具有自动增量的表中

从一个表中选择 id 并从另一个表中选择它的值进行搜索

MySQL - 从另一个表中为WHERE子句选择数据