我有一个包含2列的mysql表和一组名为MAIN
的值。
表1:
col1, int(11)
col2, int(11)
一组值: 主要:1,3,4
col1
和col2
包含1000行之间1到10之间的随机整数。然后,删除col1
和col1
包含SAME整数的任何行。
我正在尝试从table1中提取这些行,其中:
col1
包含MAIN
和col2
的值不包含col2
。
和
MAIN
包含来自col1
和mysql_query("SELECT col1,col2
FROM table1
WHERE (col1 contains values from MAIN and col2 does not)
OR (col2 contains values from MAIN and col1 does not) ");
的值不是。
在发明的伪代码中我有:
array
关于正确语法是什么的任何想法?
P.S。值集以PHP {{1}}开始。
答案 0 :(得分:4)
也许您正在寻找XOR logical operator?
SELECT
col1,
col2
FROM
table1
WHERE
( col1 IN ( 1, 3, 4 ) XOR col2 IN ( 1, 3, 4 ) );
XOR如何运作的小例子:
SELECT true XOR true; -- false
SELECT true XOR false; -- true
SELECT false XOR true; -- true
SELECT false XOR false; -- false
这几乎就是你的整体(col1 in(MAIN)而col2不是main)或(col1不在(MAIN)和col2在(main)),但写得更简洁;)
答案 1 :(得分:1)
WHERE (col1 IN (MAIN) AND col2 NOT IN (MAIN)) OR (col1 NOT IN (MAIN) AND col2 IN (MAIN))
MAIN当然应该是你的list, of, values
。
如果您的PHP数组仅包含整数,则可以使用implode(',', $array)
获取要在IN()
条件中使用的正确值列表。
答案 2 :(得分:0)
试试这个:
SELECT col1, col2 FROM table1 WHERE (col1 IN MAIN and col2 NOT IN MAIN) OR (col2 IN MAIN AND col1 NOT IN MAIN)
答案 3 :(得分:0)
好像你需要这样的smth
SELECT
col1,col2
FROM
table1
WHERE
(col1 in (1,2,3) and col2 not in (1,2,3)) or
(col1 not in (1,2,3) and col2 in (1,2,3))