插入表,该表是从其他表
选择一些价值观,我有我的数据库结构这样的:插入表,该表是从其他表
数据库结构::
-
Product_table - Product_ID(PK), Product_name
Project_Table- Project_ID(PK), Project_Name
Environment_Table- Env_ID(PK), Env_Name
Employee_Table- Employee_ID(PK), Name
Employee_Product_projectMapping_Table -Emp_ID(FK), Project_ID(FK), Product_ID(FK)
Product_EnvMapping_Table - Product_ID(FK), Env_ID(FK)
我想在ATT_Table
插入值。现在在这张表中,我有一些列,如assignedtoID
,assignedbyID
,envID
,ProductID
,project_ID
,它们在这个表中是FK,但是在其它表中是主键,它们只是数字)。
现在,当我从用户输入数据我正在在字符串的形式等用户输入Name
(Employee_Table
),product_Name
(Product_table
),而不是直接ID。所以我想首先让用户输入(的Employee
或product
或Project
或Env
)的名称,然后它的主键(Emp_ID, product_ID, project_ID, Env_ID
)的价值被拾起,然后将它们插入到ATT_table
代替assignedtoID, assignedbyID, envID, ProductID, project_ID
。
请注意assignedtoID, assignedbyID
参考在Employee_Table
。
如何做到这一点?我有这样的东西,但它不工作::
INSERT INTO ATT_TABLE(Assigned_To_ID,Assigned_By_ID,Env_ID,Product_ID,Project_ID)
VALUES (A, B, Env_Table.Env_ID, Product_Table.Product_ID, Project_Table.Project_ID)
SELECT Employee_Table.Emp_ID AS A,Employee_Table.Emp_ID AS B, Env_Table.Env_ID, Project_Table.Project_ID, Product_Table.Product_ID
FROM Employee_Table, Env_Table, Product_Table, Project_Table
WHERE Employee_Table.F_Name= "Shantanu" or Employee_Table.F_Name= "Kapil" or Env_Table.Env_Name= "SAT11A" or Product_Table.Product_Name = "ABC" or Project_Table.Project_Name = "Project1";
请使用和,而不是OR。
INSERT INTO ATT_TABLE(Assigned_To_ID,Assigned_By_ID,Env_ID,Product_ID,Project_ID)
SELECT A.Emp_ID, B.Emp_ID, Env_Table.Env_ID, Project_Table.Project_ID, Product_Table.Product_ID
FROM Employee_Table A, Employee_Table B, Env_Table, Product_Table, Project_Table
WHERE A.F_Name= "Shantanu"
AND B.F_Name= "Kapil"
AND Env_Table.Env_Name= "SAT11A"
AND Product_Table.Product_Name = "ABC"
AND Project_Table.Project_Name = "Project1";
但是,最好的做法是在您的场景中使用下拉列表,我猜。
这样处理的方式是通过使用下拉选择列表。该列表由(至少)两列构成:一个持有Id的数据库,另一个存储用户看到的字符串。像
1, "CA", "Canada"
2, "USA", 'United States"
...
用户看到
CA | Canada
USA| United States
...
是被存储在数据库中的1,2,...无论行的用户选择的值。
你永远不能依赖用户的确切,正确的输入。迟早他们会犯错字。
我根据您的评论扩展我的答案。
给定解决方案的问题(通过将输入文本连接到所有父表,并将其与多个AND组合在一起从父表中获取Id)是一旦给定参数有错字,你将不会收到任何单曲。想象一下当员工的实际F_name是“Shant * anu *”并且用户输入“Shant * aun *”时的后果。
解决这个问题的最好方法是从父表中逐个获取这些Id。假设一些FK具有NOT NULL约束。您可以检查是否填写了F_name,并在用户未填写该字段时通知用户。假设用户名为“Shant * aun *”作为名称,程序不会警告用户,因为某些内容会被填充。但这不是数据库将执行的检查,因为NOT NULL约束在Id (FK)。当你从父表中一个一个地得到Id时,你可以验证它们是否不是NULL。当填写文本时,如“Shant * aun *”,但返回的Id为NULL,则可以通知用户一个问题并让他纠正他的输入:“没有名称为'Shantaun'的员工可能是找到。”
SELECT $Emp_ID_A = Emp_ID
FROM Employee_Table
WHERE F_Name= "Shantanu"
SELECT $Emp_ID_B = Emp_ID
FROM Employee_Table
WHERE B.F_Name= "Kapil"
SELECT $Env_ID = Env_ID
FROM Env_Table
WHERE Env_Table.Env_Name= "SAT11A"
SELECT $Product_ID = Product_ID
FROM Product_Table
WHERE Product_Table.Product_Name = "ABC"
SELECT $Project_ID = Project_ID
FROM Project_Table
WHERE Project_Name = "Project1"
我知道你是对的..这是更可取的方法..但我需要在ATT_table中具有该ID值...难道我不能问什么?我们可以这样做吗?? – 2012-04-09 10:45:56
它不断给我错误插入;在SQL语句的末尾。我想它会在插入值的地方结束。当我插入值后;并运行它。它给了我之后找到的错误文本;这是显而易见的。早些时候,我也得到了同样的东西。它没有得到SELECT语句。谢谢.. – 2012-04-09 10:37:33
我已更新我的代码。请看现在。 – sarwar026 2012-04-09 10:38:19
给我...你即将追加(0)行...没有数据被添加..我认为我们需要有那个VALUES部分... – 2012-04-09 10:41:49