第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL中相交的替代方法

MySQL中相交的替代方法

慕尼黑8549860 2019-07-05 15:35:43
MySQL中相交的替代方法我需要在MySQL中實現(xiàn)以下查詢。(select * from emovis_reporting where (id=3 and cut_name= '全プロセス' and cut_name='恐慌') )  intersect( select * from emovis_reporting where (id=3) and ( cut_name='全プロセス' or cut_name='恐慌') )我知道數(shù)據(jù)庫不在MySQL里。所以我需要另一種方法。請引導我。
查看完整描述

3 回答

?
慕姐4208626

TA貢獻1852條經(jīng)驗 獲得超7個贊

Microsoft SQL Server的INTERSECT “返回由IntersectOperand左側和右側的查詢返回的任何不同值”這與標準不同INNER JOIN或WHERE EXISTS查詢。


SQLServer


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     |

+-------+

對于這個特定的問題,涉及id列,所以不會返回重復的值,但是為了完整起見,這里有一個MySQL替代方法INNER JOIN和DISTINCT:


SELECT DISTINCT value FROM table_a

INNER JOIN table_b

USING (value);


+-------+

| value |

+-------+

| B     |

+-------+

另一個例子是WHERE ... IN和DISTINCT:


SELECT DISTINCT value FROM table_a

WHERE (value) IN

(SELECT value FROM table_b);


+-------+

| value |

+-------+

| B     |

+-------+


查看完整回答
反對 回復 2019-07-05
?
蕭十郎

TA貢獻1815條經(jīng)驗 獲得超13個贊

通過使用UNIONALL和GROUPBY,有一種更有效的生成互聯(lián)系統(tǒng)的方法。根據(jù)我在大型數(shù)據(jù)集上的測試,性能要好兩倍。

例子:

SELECT t1.value from (
  (SELECT DISTINCT value FROM table_a)
  UNION ALL 
  (SELECT DISTINCT value FROM table_b)) AS t1 GROUP BY value HAVING count(*) >= 2;

它更有效,因為使用內部聯(lián)接解決方案,MySQL將查找第一個查詢的結果,然后對每一行查找第二個查詢中的結果。使用UNIONALGROUPBY解決方案,它將查詢第一個查詢的結果,第二個查詢的結果,然后將所有結果一次組合在一起。


查看完整回答
反對 回復 2019-07-05
?
浮云間

TA貢獻1829條經(jīng)驗 獲得超4個贊

查詢將始終返回空記錄集,因為cut_name= '全プロセス' and cut_name='恐慌'永遠不會評估true.

總體而言,INTERSECT在……里面MySQL應該這樣模仿:

SELECT  *FROM    mytable mWHERE   EXISTS
        (
        SELECT  NULL
        FROM    othertable o        WHERE   (o.col1 = m.col1 OR (m.col1 IS NULL AND o.col1 IS NULL))
                AND (o.col2 = m.col2 OR (m.col2 IS NULL AND o.col2 IS NULL))
                AND (o.col3 = m.col3 OR (m.col3 IS NULL AND o.col3 IS NULL))
        )

如果兩個表的列標記為NOT NULL,您可以省略IS NULL部分和重寫查詢的效率略高一些。IN:

SELECT  *FROM    mytable mWHERE   (col1, col2, col3) IN
        (
        SELECT  col1, col2, col3        FROM    othertable o        )


查看完整回答
反對 回復 2019-07-05
  • 3 回答
  • 0 關注
  • 680 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號