在选择 sql 查询中选择

Posted

技术标签:

【中文标题】在选择 sql 查询中选择【英文标题】:select in select sql query 【发布时间】:2019-09-18 09:30:18 【问题描述】:

我想创建一个 sql 查询。我想要的列名,它在另一个表中。我写了这个查询。

SELECT (SELECT FieldName From TableGENQuest WHERE ID = 1)
FROM TableGEN
WHERE strSO = 'RV12648-01';

我想使用 TableGENQuest 表的 FieldName 列从 strGEN1 列中获取数据。这是我想要的数据No significant transportation damage observed

【问题讨论】:

改为LEFT JOIN 显示两张表数据 您很可能需要使用 JOIN。这些表有什么共同的字段吗? 请定义“它不起作用。” 要使用当前数据结构完成您想要的操作,您需要一些动态生成的 SQL,而在 Access 中做到这一点的唯一方法是编写一个创建并执行正确查询的 VBA 脚本。以***.com/questions/28093543/… 为例 【参考方案1】:

tl;dr:您的请求无法单独使用 MS Access SQL。

您将需要使用 VBA 打开一个包含表 TableGENQuest 内容的记录集,并在遍历该记录集保存的记录时构造一个适当的 SQL 语句。

例如:

Sub GenerateQuery()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim sql As String
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("SELECT FieldName FROM TableGENQuest WHERE ID = 1")

    With rst
        If Not .EOF Then
            .MoveFirst
            Do Until .EOF
                sql = sql & "[" & !FieldName & "], "
                .MoveNext
            Loop
            sql = "select " & Left(sql, Len(sql) - 2) & " from TableGEN WHERE strSO = 'RV12648-01';"
        End If
        .Close
    End With

    If sql <> vbNullString Then dbs.CreateQueryDef "OutputQuery", sql
    Set rst = Nothing
    Set dbs = Nothing
End Sub

上面将生成一个在当前数据库中定义的查询,其中一条 SQL 语句选择其字段名使用 SQL 来源的字段:

SELECT FieldName FROM TableGENQuest WHERE ID = 1

这种方法的难度和复杂性表明您的数据库设计不佳:字段名称本身应该显示为另一个表中的行。

【讨论】:

@Mustafa 怎么会有人从你的问题中知道这一点?这是你第一次提到它。如果你从一开始就告诉人们真正的问题,它会有所帮助。但无论如何,概念将完全相同,您只需使用 java 语法编写相同的想法。你有没有尝试过?你在哪里卡住了?【参考方案2】:
SELECT b.FieldName FROM TableGEN a
LEFT OUTER JOIN TableGENQuest b
ON a.ID=b.ID
WHERE a.strSO = 'RV12648-01'
AND b.ID=1

SELECT a.strSO,b.FieldName,b.ID
FROM TableGEN a
LEFT OUTER JOIN
(
SELECT FieldName,ID From TableGENQuest WHERE ID = 1
)
b 
ON a.ID = b.ID
WHERE strSO = 'RV12648-01'

试试这个查询...或者可以更改联接类型...

【讨论】:

ON a.ID=b.ID ...您在哪里证明两个表都包含“ID”字段,或者它们相互映射?我们只知道一个 ID 字段,因此您的代码只是猜测。如果您更仔细地阅读 OP 的描述,您会发现它们不太可能匹配。 OP其实是在寻找动态SQL解决方案,没有VBA代码是不可能的。 SELECT b.FieldName ...这只会打印字符串“strGEN01”。它不会打印另一个表中名为 strGEN01 的所需列中的数据。【参考方案3】:

试试这个:

SELECT TableGENQuest.FieldName 
FROM TableGEN, TableGENQuest 
WHERE TableGENQuest.ID=1 AND WHERE strSO = 'RV12648-01';

【讨论】:

再次阅读您的查询。 你不能有两个 WHERE 关键字,你应该使用标准的 JOIN 语法。逗号分隔的联接是遗留问题,不再推荐。

以上是关于在选择 sql 查询中选择的主要内容,如果未能解决你的问题,请参考以下文章

SQL 在单个查询中更新和选择

SQL中,我想把SQL查询分析器查询出来的结果,导出到EXCEL表格,求各位大侠指点。

SQL查询在同一张发票中选择多个产品

为啥它说在 sql 查询中选择的列数错误?

sql在查询中选择最大日期

如何在选择查询中增加 sql 计数器