Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Alternatywa dla Intersect w MySQL

Microsoft SQL Server INTERSECT "zwraca wszelkie odrębne wartości, które są zwracane przez zapytanie po lewej i prawej stronie operandu INTERSECT" Różni się to od standardowego INNER JOIN lub WHERE EXISTS zapytanie.

Serwer 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     |
+-------+

W przypadku tego konkretnego pytania w grę wchodzi kolumna id, więc zduplikowane wartości nie zostaną zwrócone, ale dla zachowania kompletności, oto alternatywa dla MySQL przy użyciu INNER JOIN i DISTINCT :

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

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

I kolejny przykład z użyciem WHERE ... IN i DISTINCT :

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. brew zainstaluj mysql na macOS

  2. Zdefiniuj zmienną w ramach wyboru i użyj jej w ramach tego samego wyboru

  3. PHP wstawia wiele tablic pól wyboru ORAZ pól tekstowych do bazy danych MySQL

  4. count(*) i count(nazwa_kolumny), jaka jest różnica?

  5. Błąd podczas zmiany nazwy kolumny w MySQL