Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thay thế cho Intersect trong MySQL

INTERSECT của Microsoft SQL Server "trả về bất kỳ giá trị riêng biệt nào được trả về bởi cả truy vấn ở bên trái và bên phải của toán hạng INTERSECT" Điều này khác với một INNER JOIN tiêu chuẩn hoặc WHERE EXISTS truy vấn.

Máy chủ SQL

CREATE TABLE table_a (
    id INT PRIMARY KEY,
    value VARCHAR(255)
);

CREATE TABLE table_b (
    id INT PRIMARY KEY,
    value VARCHAR(255)
);

INSERT INTO table_a VALUES (1, 'A'), (2, 'B'), (3, 'B');
INSERT INTO table_b VALUES (1, 'B');

SELECT value FROM table_a
INTERSECT
SELECT value FROM table_b

value
-----
B

(1 rows affected)

MySQL

CREATE TABLE `table_a` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `value` varchar(255),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE `table_b` LIKE `table_a`;

INSERT INTO table_a VALUES (1, 'A'), (2, 'B'), (3, 'B');
INSERT INTO table_b VALUES (1, 'B');

SELECT value FROM table_a
INNER JOIN table_b
USING (value);

+-------+
| value |
+-------+
| B     |
| B     |
+-------+
2 rows in set (0.00 sec)

SELECT value FROM table_a
WHERE (value) IN
(SELECT value FROM table_b);

+-------+
| value |
+-------+
| B     |
| B     |
+-------+

Với câu hỏi cụ thể này, cột id có liên quan, vì vậy các giá trị trùng lặp sẽ không được trả lại, nhưng để hoàn thiện, đây là một giải pháp thay thế MySQL bằng cách sử dụng INNER JOINDISTINCT :

SELECT DISTINCT value FROM table_a
INNER JOIN table_b
USING (value);

+-------+
| value |
+-------+
| B     |
+-------+

Và một ví dụ khác sử dụng WHERE ... INDISTINCT :

SELECT DISTINCT value FROM table_a
WHERE (value) IN
(SELECT value FROM table_b);

+-------+
| value |
+-------+
| B     |
+-------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. node.js async / await sử dụng với MySQL

  2. JSON_STORAGE_SIZE () - Tìm Kích thước Lưu trữ của Tài liệu JSON trong MySQL

  3. Cách tính Doanh thu trong MySQL

  4. Mã lỗi 1292 - Giá trị DOUBLE không chính xác bị cắt ngắn - Mysql

  5. Tạo ứng dụng web từ Scratch bằng Python Flask và MySQL:Phần 3