| one | two |
-------------
| A | 1 |
| A | 2 |
| B | 1 |
| B | 3 |
| C | 1 |
| C | 4 |
Я хотел бы получить не повторяется в любой колонке в запросе, поэтому стандартный SELECT DISTINCT one,two FROM table;
или SELECT * FROM table GROUP BY one,two;
не совсем работает, потому что он ищет отличие во всех строках, которые в этот случай вернет все 6 строк.несколько столбцов отличаются в MySQL
В идеале, я ищу:
| one | two |
-------------
| A | 1 |
| B | 3 |
| C | 4 |
В PHP (и т.д.), я бы просто сделать это с помощью массива для каждого столбца, и если какой-либо столбец был использован ранее, пропустите эту строку. Однако я не уверен, как реализовать это в MySQL.
SELECT * FROM (SELECT * FROM table GROUP BY one) GROUP BY two
- почти работает. но поскольку внешний запрос не видит всех альтернатив, он будет пропускать действительные параметры, т. е. внутренняя будет рушиться до A, B, C, но вполне может выбрать все 1s для столбца два, что означало бы, что вторая GROUP BY будет затем свернуть его до 1 строки!
Я знаю, что порядок проверки дублирования будет влиять на точные строки, возвращенные - не беспокоясь об этом, - я просто хочу иметь хорошее поперечное сечение строк с минимальными подобными строками.
Обоснуйте правила запроса. Если есть 2 строки с одним и тем же полем «один», которое вы хотите иметь на выходе? –
В вашем примере вы выбрали 'A - 1', который является первым совпадением, но в двух других вы выбрали второе совпадение. Можете ли вы закрепить свой выбор тем или иным? –
В дополнение к вопросу Клемента - что произойдет, если «C» в столбце один встречается только со значениями в столбце два, которые уже произошли с «A» и «B»? – quosoo