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_name
和 Team
。
我的原始查询是从table2
获取所有内容
SELECT *
FROM qabin.allqas t1
JOIN login.users t2
ON (t1.Submitter = t2.user_name)
WHERE t1.Status='Complete'
这一切都很好,很好,工作正常,但我只想得到user_name
和Team
为了让事情更有趣,它们位于不同的数据库中,尽管这不是问题。
一个在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 从一个表中选择全部,从另一个表中选择一些使用别名的主要内容,如果未能解决你的问题,请参考以下文章