如何在mysql中获取两个查询的交集

时间:2016-11-13 11:37:53

标签: mysql database

我有一个表有两列,两个外键来自两个不同的表。

这是我的关系表:

table

我想选择能同时使用身份3和4的语言的学生。

我怎么能写一个查询给我e.x 12,14

2 个答案:

答案 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