2013-05-12 2 views
0

Я хочу вставить значение в таблицу glmast в поле acname.MySQL Вставить запрос с внешним ключом

условия, которые я использую следующим образом

g.gl_id = p.gl_id AND p.pl_id='$pdidedit' with g as glmast and p as packlist 

Я попытался соединения и попробовать код ниже ..

INSERT INTO glmast (acname) 
VALUES 
('$glidnew') SELECT glmast.acname WHERE glmast.gl_id = packlist.gl_id AND packlist='$pdidedit'"; 

Любая помощь высоко appreciated..Thanks все ..

+0

Какое сообщение об ошибке вы получаете? – ajtrichards

+1

Действительно ли синтаксис 'INSERT INTO .. ​​VALUES .. SELECT'? – karthikr

+0

Я пробовал в phpadmin с некоторыми входными значениями .. Он не выполнялся .. @ ajtrichards Спасибо за ответin :) – user2234992

ответ

2

Вы можете написать вставить как

INSERT INTO glmast (acname) VALUES ('$glidnew'); 

или

INSERT INTO glmast (acname) 
SELECT glmast.acname from glmast,packlist 
    WHERE glmast.gl_id = packlist.gl_id 
    AND packlist.gl_id = '$pdidedit'"; 

Имейте в виду, что во втором примере не может быть несколько вставок в тех случаях, когда выберите возвращает несколько строк.

+0

Нет «ЦЕННОСТЕЙ» когда вы используете 'SELECT' в качестве данных. – Barmar

+0

@mpapec Как вставить значение, которое я хочу ... Спасибо за ваш ответ в любом случае. – user2234992

+0

@ user2234992, сначала сделайте простой выбор, который возвращает значение, которое вы хотите для 'acname'. После этого вы можете использовать вставку, как во втором примере. –

1

Я думаю, что это может быть то, что вы пытаетесь сделать:

INSERT INTO glmast(gl_id, acname) 
SELECT '$glidnew', glmast.acname 
FROM glmast JOIN packlist ON glmast.gl_id = packlist.gl_id 
WHERE packlist.pl_id='$pdidedit' 

Вы твердите INSERT, но я уверен, что вы имеете в виду UPDATE:

UPDATE glmast g 
JOIN packlist p ON g.gl_id = p.gl_id 
SET g.acname = '$glidnew' 
WHERE p.pl_id = '$pdidedit' 

Или, может быть, это это:

INSERT INTO glmast (acname, col1, col2, col3, ...) 
SELECT '$glidnew', g.col1, g.col2, g.col3, ... 
FROM glmast g 
JOIN packlist p ON g.gl_id = p.gl_id 
WHERE p.pl_id = '$pdidedit' 
+0

Спасибо за ваш ответ .. Я хочу, чтобы $ glidnew вставил в поле acname таблицы glmast. Упование ясное. Спасибо снова – user2234992

+0

Тогда что вы используете 'select glmast.acname' для? Вы уверены, что не хотите ОБНОВИТЬ, а не INSERT? – Barmar

+0

yes Это вставка в новую строку. Вот как мне это нужно. @Barmer – user2234992

0

Я верю, что это что-то вроде этого вы пытаетесь т о достижении:

INSERT INTO glmast (acname) VALUES('$glidnew') 
WHERE (
    SELECT glmast.acname FROM glmast GM 
    JOIN packlist PL ON (PL.gl_id = GM.gl_id) 
    WHERE PL.pl_id='$pdidedit' 
) 

Но этот синтаксис не действует в MySQL. Вам придется запустить ВЫБЕРИТЕ-заявление первым, а затем вставить в таблицу glmast на основе результирующего заданные из отборного-запроса:

Шаг 1:

SELECT glmast.acname FROM glmast GM 
JOIN packlist PL ON (PL.gl_id = GM.gl_id) 
WHERE PL.pl_id='$pdidedit' 

Шаг 2:

INSERT INTO glmast (acname) VALUES({values from Step1}) 

В некотором смысле вы можете сказать, что $glidnew представляет значения из шага 1.

+0

Почему LEFT JOIN? И вы не используете '$ glidnew' в шаге 1 или шаге 2. – Barmar

+0

@Barmar - конечно, его не следует оставлять. Спасибо (я использую это больше всего, так что это была просто привычка :-)) $ glidnew совпадает с значениями с шага 1. Я должен это разъяснить. – bestprogrammerintheworld