答案 0 :(得分:4)
你可以尝试一下:
SELECT
student_id,
COUNT(*) total
FROM your_table
WHERE language_id IN (3,4)
GROUP BY student_id
HAVING COUNT(*) = 2;
只有IN
不能确保学生同时参与语言ID 3 & 4
。
您需要使用GROUP BY student_id HAVING COUNT(*) = 2
才能确保结果中的student_id
成为language id 3 & 4
另一种解决方案是使用INNER JOIN
。但它没有扩展。
SELECT
A.student_id
FROM your_table A
INNER JOIN your_table B ON A.student_id = B.student_id
AND A.language_id = 3 AND B.language_id = 4
答案 1 :(得分:4)
假设您的关系被命名为" my-relation":
CREATE PROCEDURE ORDERBOOKS(IN store VARCHAR(10), IN title VARCHAR(50))
BEGIN
DECLARE order_num VARCHAR(100);
DECLARE tod DATE;
SELECT @ordered_qty := qty FROM customer_sales WHERE customer_sales.store_id = store AND customer_sales.title_id = title;
SELECT @in_stock := qty FROM store_inventories WHERE store_inventories.stor_id=store AND store_inventories.title_id = title;
SELECT @threshold := minStock FROM store_inventories WHERE store_inventories.stor_id=store AND store_inventories.title_id = title;
SET order_num = CONCAT(store, title);
SET tod = GETDATE();
IF (@ordered_qty < (@in_stock - @threshold)) THEN UPDATE store_inventories SET qty = (@in_stock - @ordered_qty) WHERE store_inventories.stor_id = store and store_inventories.title_id = title;
ELSE
INSERT INTO pending_orders(stor_id, ord_num, title_id, qty, date, fulfilled) VALUES(store, order_num, title, (@ordered_qty + @threshold), tod ,1);
INSERT INTO sales VALUES(store, order_num, tod);
INSERT INTO salesdetail VALUES(store, order_num, title , (@ordered_qty + @threshold),0);
UPDATE pending_orders SET fulfilled=0 WHERE pending_orders.stor_id = store AND pending_orders.title_id = title;
UPDATE store_inventories SET qty = (@threshold + @in_stock) WHERE store_inventories.stor_id = store and store_inventories.title_id= title;
DELETE FROM pending_orders WHERE pending_orders.stor_id = store AND pending_orders.title_id = title;
END IF
END