具有表结构的SQL查询
我的数据库表结构如下:具有表结构的SQL查询,sql,join,database-design,Sql,Join,Database Design,我的数据库表结构如下: datatype data mytable id address1 address2 1 test add test add2 2 test add test add2 2 test add test add2 现在datatype有主键datatypeid,数据表有datatypeid作为外键,mytable id作为外键 在数据类型中,我有一个名为description的列,它有address1、address2等 这些地址的值以datatypeid
datatype
data
mytable
id address1 address2
1 test add test add2
2 test add test add2
2 test add test add2
现在datatype有主键datatypeid,数据表有datatypeid作为外键,mytable id作为外键
在数据类型中,我有一个名为description的列,它有address1、address2等
这些地址的值以datatypeid作为参考存储在数据表中
因此,我想做一个select语句,将mytable和address1、address2等的ID显示为列,其值来自data.values,如下所示:
datatype
data
mytable
id address1 address2
1 test add test add2
2 test add test add2
2 test add test add2
以下是我到目前为止的查询,但它以不同的格式输出:
SELECT id
FROM datatype
INNER JOIN data ON datatype.DataTypeID = data.DataTypeID
INNER JOIN mytable ON data.ID = mytable.ID
编辑:
表结构:
datatype
-datatypeid int
-description varchar(50)
data
-id int
-datatypeid int
-datavalue varchar(50)
-mytableid int
mytable
-mytableid int
-datecreated datetime
样本数据
你能帮忙吗?我不太了解你数据库的结构,但我可以帮你提建议:
SELECT B.id
FROM datatype A INNER JOIN
data B ON datatype.DataTypeID = data.DataTypeID INNER JOIN
mytable C ON data.ID = mytable.ID
这有助于确保属性之间没有冲突
RQ:您已经将ID为大写的data.ID放在内部联接中,而在SELECT中,您已经将ID为小写。这可能会导致问题,我不确定。吐出这个,但是试试看
SELECT m.mytableid, CASE WHEN dt.datatypeid = 1 AND d.datatypeid =1 THEN d.datavalue ELSE null END AS "address1"
, CASE WHEN dt.datatypeid = 2 AND d.datatypeid =2 THEN d.datavalue ELSE null END AS "address2"
,m.datecreated
FROM datatype dt inner join
data d on dt.datatypeid = d.datatypeid inner join
mytable m on d.mytableid = m.mytableid
我不认为这种结构适合你想要的东西,但如果你坚持下去 像这样的东西可能会有帮助。我根本没有测试过它 我的假设 有一些谓词…只是没有列出 并不是每个id都有2个地址,因此如果您进行内部联接,它们将被消除 mytable有一些用途,我只是不明白为什么它会出现在这个示例中。 数据类型表的值多于address1和address2
WITH address1 as (
SELECT id,datavalue
FROM data
WHERE datatypeid = <datatypeid for addr1>
),
address2 as(
SELECT id,datavalue
FROM data
WHERE datatypeid = <datatypeid for addr2>
)
SELECT d.id,
a1.datavalue as address1,
a2.datavalue as address2
FROM data d
LEFT OUTER JOIN address1 a1
ON d.id = a1.id
LEFT OUTER JOIN address2 a2
ON d.id = a2.id
同样,您可能需要对sql进行一些调整,因为它不会在一个有很多行的生产环境中执行,而这些行是完全不清楚的。请显示所涉及表的结构和一些示例数据。如果我理解正确,您希望datatype中的所有描述成为此查询的列名,然后此查询的数据来自数据表。这是正确的吗?如果数据类型中的行数是静态的,我可以帮助您解决这个问题,您可以使用case语句来填充列。然而,如果数据类型中的行数是动态的,我想不出一个好方法来将该行数据设置为动态的columns@peroija数据类型表是静态的请参阅my edi for table Structure您的请求总是不清楚,请尝试进一步澄清您的需要。因此,我想做一个select语句来显示mytable和address1中的ID,address2等作为列,值来自数据。值如下:不够清晰