我有两张表如下:
表1:
ID FName
1 Basics
2 Machine1
3 master
4 Machine2
15 Machine3
16 Machine16
表2:
ParentID Name InitialValue
1 Active 1
2 MachineName Entrylevel
2 Active 1
3 Active 1
4 MachineName Midlevellevel
4 Active 1
15 MachineName Endlevel
15 Active 1
16 MachineName Miscellenious
16 Active 0
这里,表1的ID在表2中称为父ID。我想要"初始值"表2中的MachineName行(表2)提供了" InitialValue"表2中活性行(表2)的结果为1
结果应该是
ID InitialValue
2 Entrylevel
4 Midlevellevel
15 Endlevel
答案 0 :(得分:1)
您可以连接第二个表两次,一次用于MachineName,一次用于Active:
SELECT t.ID, machine.InitialValue
FROM table1 t
INNER JOIN table2 machine
ON t.ID = machine.ParentId
AND machine.Name = 'MachineName'
INNER JOIN table2 active
ON t.ID = active.ParentId
AND active.Name = 'Active'
AND active.InitialValue = 1;
JOIN
语法允许您将记录链接到FROM
列表中的上一个表,大多数情况下通过外键关系 - 主键。在遥远的过去,我们过去常常使用WHERE
条件,但这确实是过时的语法。
在上面的查询中,主键 - 外键的关系在第一种情况下用t.ID = machine.ParentId
表示。请注意为table2定义的别名,因此我们可以使用machine
来引用它。
在连接条件中添加了一些额外条件,例如machine.Name = 'MachineName'
。那些也可以放在WHERE
条款中,但我喜欢这样。
然后再次连接同一个表,这次使用另一个别名。这次它过滤了" Active" 1条记录。请注意,如果table1中的 ID 没有与这些条件匹配的记录,则该父记录将从结果中排除。
所以现在我们有table1记录,匹配" MachineName"记录并确定有一个" Active"它也有1条记录。这是需要输出的内容。
答案 1 :(得分:0)
SELECT t1.ID, t2.InitialValue
FROM table1 t1 join table2 t2 on t1.ID=t2.ParentID
WHERE t2.name LIKE 'MachineName'AND t1.ID= ANY(SELECT t22.ParentID
FROM table2 t22
WHERE t22.InitialValue=1)
我认为这应该有用
//稍微更改了WHERE clausule中的条件(t2.parentID更改为t1.ID)
答案 2 :(得分:0)
不确定这是否是标准SQL,但它应该可以使用MySQL。
SqlBulkCopy