我有两个表(champ_value和champ_form),我尝试了两种查询,但我没有得到我想要的结果,如何修改我的查询以获得所需的结果?
请你能不能给我其他的解决办法提前
感谢。
+-------------+-----------+---------------------+---------------+
| champ value | | | |
| | | | |
| v_id | v_value | v_fk_order_item_id | v_fk_champ_id |
| 220 | Bernad | 20000 | 1 |
| 221 | Lagaf | 20000 | 2 |
| 500 | Vincent | 20000 | 1 |
| 501 | Pernault | 20000 | 2 |
+-------------+-----------+---------------------+---------------+
+------------+-------------+---------------+-------------+
| champ_form | | | |
| cf_id | cf_position | cf_fk_form_id | cf_champ_id |
| 330 | 10 | 1800 | 1 |
| 331 | 12 | 1800 | 2 |
| 630 | 13 | 1800 | 1 |
| 631 | 14 | 1800 | 2 |
+------------+-------------+---------------+-------------+
期望的结果将是这样的:
+----------------+-------+-------------+-------------+----------+
| desired result | | | | |
| | | | | |
| v_id | cf_id | cf_position | cf_champ_id | v_value |
| 220 | 330 | 10 | 1 | Bernard |
| 221 | 331 | 12 | 2 | Lagaf |
| 500 | 630 | 13 | 1 | Vincent |
| 501 | 631 | 14 | 2 | Pernault |
+----------------+-------+-------------+-------------+----------+
我尝试这样第一查询:
SELECT v.v_id, cf.cf_id, cf.cf_position, cf.cf_champ_id, v.v_value
FROM champ_form cf
JOIN champ_value v ON v.v_fk_champ_id = cf.cf_champ_id
WHERE cf.cf_fk_form_id =1800
AND v.v_fk_order_item_id =20000
GROUP BY v_id
ORDER BY cf.cf_position
和我获得此:
+---------------+-------+-------------+-------------+----------+
| group by v_id | | | | |
| | | | | |
| v_id | cf_id | cf_position | cf_champ_id | v_value |
| 220 | 330 | 10 | 1 | Bernard |
| 221 | 330 | 10 | 1 | Vincent |
| 500 | 331 | 12 | 2 | Lagaf |
| 501 | 331 | 12 | 2 | Pernault |
+---------------+-------+-------------+-------------+----------+
和第二查询:
SELECT v.v_id, cf.cf_id, cf.cf_position, cf.cf_champ_id, v.v_value
FROM champ_form cf
JOIN champ_value v ON v.v_fk_champ_id = cf.cf_champ_id
WHERE cf.cf_fk_form_id =1800
AND v.v_fk_order_item_id =20000
GROUP BY cf.cf_id
ORDER BY cf.cf_position
+----------------+-------+-------------+-------------+---------+
| group by cf_id | | | | |
| | | | | |
| v_id | cf_id | cf_position | cf_champ_id | v_value |
| 220 | 330 | 10 | 1 | Bernard |
| 221 | 331 | 12 | 2 | Lagaf |
| 220 | 630 | 13 | 1 | Bernard |
| 221 | 631 | 14 | 2 | Lagaf |
+----------------+-------+-------------+-------------+---------+
第一个查询提供了良好的值,但不正确的位置 和第二给出了正确的位置,但不正确的值。
请的话有什么期望的行为描述。 –
你能给你预期的产出吗? – Sadikhasan
发生这种情况是因为您的GROUP BY子句与SELECTed值不一致。在除MySQL以外的大多数其他数据库中,这会引发错误以防止出现这种意外行为。 –