2012-04-23 4 views
1

Я хотел ограничивать INSERT с числом строк другой таблицы, как это:LIMIT с SELECT, запрос COUNT в SQL

INSERT INTO pacte (alianca_en_pacte, tipus) 
SELECT id_alianca_en_pacte1 ,tipus_pacte1 
FROM c_alianca 
LIMIT 0, SELECT COUNT(tipus_pacte1) FROM c_alianca WHERE tipus_pacte1 IS NOT NULL 

Следующий запрос:

SELECT COUNT(tipus_pacte1) FROM c_alianca WHERE tipus_pacte1 IS NOT NULL 

возвращает

При выполнении сценария, следующая ошибка apears:

У вас возникла ошибка в синтаксисе SQL; в руководстве, соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «SELECT * FROM c_alianca» в строке 4

+0

вы не можете использовать подзапрос на пределе, но и вам не нужно. сделайте свое ограничение по вашему запросу. Проверьте мой ответ. –

ответ

5

Почему просто не запрашивать ваши критерии и вставьте их, как это?

INSERT INTO pacte (alianca_en_pacte, tipus) 
SELECT id_alianca_en_pacte1 ,tipus_pacte1 
FROM c_alianca 
WHERE tipus_pacte1 IS NOT NULL 
+0

Duh. Я думал слишком буквально! +1 – eggyal

+0

Спасибо, он отлично работает! Я думаю, что я ломал голову, когда было так просто. –

3

Это то, что вы после

INSERT INTO pacte (alianca_en_pacte, tipus) 
SELECT id_alianca_en_pacte1, tipus_pacte1, 
    (SELECT COUNT(tipus_pacte1) FROM c_alianca WHERE tipus_pacte1 IS NOT NULL) AS tipus 
FROM c_alianca LIMIT 0 
4

MySQL в настоящее время не поддерживает наличие подзапроса в качестве аргумента LIMIT. Вам нужно будет использовать пользовательские переменные через два запроса:

SET @limit = (
    SELECT COUNT(tipus_pacte1) FROM c_alianca WHERE tipus_pacte1 IS NOT NULL 
); 

INSERT INTO pacte (alianca_en_pacte, tipus) 
    SELECT id_alianca_en_pacte1 ,tipus_pacte1 
    FROM c_alianca 
    LIMIT 0, @limit; 

Но as suggested by Nesim Razon, в вашем примере можно избежать с помощью LIMIT полностью:

INSERT INTO pacte (alianca_en_pacte, tipus) 
    SELECT id_alianca_en_pacte1 ,tipus_pacte1 
    FROM c_alianca 
    WHERE tipus_pacte1 IS NOT NULL; 
0
below is the code for Limitation on ID....It is the example for you 
Declare @Counter int 
Set @Counter=(SELECT Count(Student_ID) as 'StudentCount' FROM CourseSemOne 
where Student_ID=1 Having Count(Student_ID) < 6 and Count(Student_ID) > 0) 
if(@Counter <6) 
print'Sorry! You cannot add more than five subject data for a single student' 
else 
print'Insert Code'; 
+0

добавил @ ρяσѕρєяK –