使用先前的SELECT查询的结果从表中进行SQL Select?

时间:2018-08-24 17:54:20

标签: php tsql select

基本上,我想从一个表中进行选择,然后使用从另一表中进行选择的结果,然后最终回显我选择的值。

DECLARE @var1 int; /*This should become the result of Table1.Column1 */
DECLARE @var2 nchar(50); /*This should become the result of Table1.Column2 */
DECLARE @var3 nchar(50); /*This should become the final result */

SELECT @var1 = (SELECT Column1 FROM Table1 WHERE Column3 = '12345')
SELECT @var2 = (SELECT Column2 FROM Table1 WHERE Column3 = '12345')

SELECT Column1 FROM Table2 WHERE Id = @var1

然后,一旦完成,PHP将回显var1,var2和var3。

我知道使用2个单独的查询会更容易,但是我想保持它的清洁,而不必这样做,有人知道我该怎么做吗?我知道我提供的代码已经完全关闭,但希望它对我要做什么有意义。

2 个答案:

答案 0 :(得分:2)

这是联接的目的。您的前两个示例SELECT语句可以合并为一个语句,例如:

 SELECT column1, column2 FROM table WHERE column3 = '12345';

然后您可以加入您的table2

SELECT
    t1.column1,
    t1.column2,
    t2.column1
FROM Table1 T1
    LEFT OUTER JOIN Table2 T2
        ON t1.column2 = t2.id
WHERE t1.Column3 = '12345';

在这里使用LEFT OUTER JOIN,因为这是最适合上面的psuedo代码的联接类型。本质上是“根据该ON条件从表1中选择与WHERE条件匹配的所有记录,以及可能与table2相匹配的任何记录。如果在表2中没有针对该ON条件的记录匹配,则仅对该table2列返回NULL”。

返回的结果集将具有三个字段,这些字段在功能上等于您的@var1@var2@var3

答案 1 :(得分:0)

您可以通过两种方式执行此操作。由于您的第一个查询似乎返回单个结果,因此您可以在第二个查询中将该子选择用作表达式:

SELECT @var2 = (SELECT Column2 FROM Table1 WHERE Column3 = (SELECT Column1 FROM Table1 WHERE Column3 = '12345'))

或者您可以使用公用表表达式(我假设是SQL Server):

with CTE_Table (var1) as
(SELECT Column1 FROM Table1 WHERE Column3 = '12345')
SELECT @var2 = (SELECT Column2 FROM Table1 WHERE Column3 = (select var1 from CTE_Table))

该圆周应该起作用。我只是在此处输入上下文信息,但尚未测试语法。