在选择 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 查询中选择的主要内容,如果未能解决你的问题,请参考以下文章