我有一个chartTable
,其中有2列:
ChildPersonID | ParentPersonID
--------------+-----------------
1 | 2
1 | 3
2 | 4
该列与personTable
有2列:
ID | PersonName
---+-----------------
1 | a
2 | b
3 | c
4 | d
我想要一个选择查询,该查询用在Treeview中显示的PersonName填充数据表
结果:
parentname | parentid | childname | childid
-----------+----------+-----------+---------
a | 1 | b | 2
a | 1 | c | 3
b | 2 | d | 4
我的代码
DECLARE @Table1 TABLE (ChildPersonID INT,ParentPersonID INT)
DECLARE @Table2 TABLE (ID INT, PersonName VARCHAR(10))
INSERT INTO @Table1 VALUES (1,2),(1,3),(2,4)
INSERT INTO @Table2 VALUES (1,'a'),(2,'b'),(3,'c'),(4,'d')
SELECT T3.PersonName AS parentName, T1.ChildPersonID AS ParentId,
T2.PersonName AS childname, T1.ParentPersonID AS childid
FROM @Table1 T1
INNER JOIN @Table2 T2 ON T1.ParentPersonID = T2.Id
INNER JOIN @Table2 T3 ON T2.ChildPersonID = T3.id
答案 0 :(得分:1)
这是您要查找的查询(尽管您提到的列名令人困惑,但我认为应该将其反转)
DECLARE @Table1 TABLE (ChildPersonID INT,ParentPersonID INT)
DECLARE @Table2 TABLE (ID INT, PersonName VARCHAR(10))
INSERT INTO @Table1 VALUES (1,2),(1,3),(2,4)
INSERT INTO @Table2 VALUES (1,'a'),(2,'b'),(3,'c'),(4,'d')
SELECT T3.PersonName AS parentName, T1.ChildPersonID AS ParentId,
T2.PersonName AS childname, T1.ParentPersonID AS childid
FROM @Table1 T1
INNER JOIN @Table2 T2 ON T1.ParentPersonID = T2.Id
INNER JOIN @Table2 T3 ON T1.ChildPersonID = T3.id
答案 1 :(得分:1)
请参见下面的代码:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication94
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("parentname", typeof(string));
dt.Columns.Add("parentid", typeof(int));
dt.Columns.Add("childname", typeof(string));
dt.Columns.Add("childid", typeof(int));
DataTable dtChildPerson = new DataTable();
dtChildPerson.Columns.Add("ChildPersonID", typeof(int));
dtChildPerson.Columns.Add("ParentPersonID", typeof(int));
dtChildPerson.Rows.Add(new object[] { 1, 1 });
dtChildPerson.Rows.Add(new object[] { 1, 3 });
dtChildPerson.Rows.Add(new object[] { 2, 4 });
DataTable personName = new DataTable();
personName.Columns.Add("ID", typeof(int));
personName.Columns.Add("PersonName", typeof(string));
personName.Rows.Add(new object[] { 1, "a" });
personName.Rows.Add(new object[] { 2, "b" });
personName.Rows.Add(new object[] { 3, "c" });
personName.Rows.Add(new object[] { 4, "d" });
foreach (DataRow row in dtChildPerson.AsEnumerable())
{
int parentID = row.Field<int>("ParentPersonID");
string parentName = personName.AsEnumerable().Where(x => x.Field<int>("ID") == parentID).Select(x => x.Field<string>("PersonName")).FirstOrDefault();
int childID = row.Field<int>("ChildPersonID");
foreach(DataRow childRow in personName.AsEnumerable().Where(x => x.Field<int>("ID") == childID))
{
string childName = childRow.Field<string>("PersonName");
dt.Rows.Add(new object[] { parentName, parentID, childName, childID });
}
}
}
}
}