MySQL查询条件或

MySQL查询条件或,mysql,conditional-statements,Mysql,Conditional Statements,我正在与virtuemart合作,我有一个表来存储有关订单和用户地址的所有信息。当用户登录时,他们会给我一个地址,我称之为“BillTo”,但当他们制作并订购时,用户可以创建一个名为“shipto”的新地址。因此,如果他们创建了一个新地址“shipto”,我必须将发票发送到“billto”,并将订单的项目发送到“shipto”。我正在尝试获取发送订单项目的所有地址。我有这样的桌子 ORDER_ID | TYPE | ADDRESS ------------------------

我正在与virtuemart合作,我有一个表来存储有关订单和用户地址的所有信息。当用户登录时,他们会给我一个地址,我称之为“BillTo”,但当他们制作并订购时,用户可以创建一个名为“shipto”的新地址。因此,如果他们创建了一个新地址“shipto”,我必须将发票发送到“billto”,并将订单的项目发送到“shipto”。我正在尝试获取发送订单项目的所有地址。我有这样的桌子

ORDER_ID   |   TYPE   |   ADDRESS
----------------------------------
1           BT           My office
1           ST           My house
2           BT           Home home home
3           BT            office
3           ST           office 2
我需要得到所有的ST地址,如果不存在,得到BT地址

1           ST           My house
2           BT           Home home home
3           ST           office 2
我该怎么做

编辑:

这是我的SQL查询。 选择o.order\u编号、os.order\u状态\u名称、ou.first\u名称、ou.last\u名称、ou.phone\u 1、ou.phone\u 2、ou.address\u 1、ou.address\u 2、ou.zip、ou.city、uv.fieldtitle

从作为pc的虚拟产品营销活动

在pc上以oi的形式左键连接\uUuU virtuemart\u order\u项目。virtuemart\u product\u id=oi.virtuemart\u product\u id

左连接uuu virtuemart\u订单作为oi.virtuemart\u订单\u id=o.virtuemart\u订单\u id上的o

左连接\uuuu virtuemart\uOrderState为os ON os.order\uStatus\uCode=o.order\uStatus

左连接\uu virtuemart\u order\u用户信息作为ou.virtuemart\u order\u id=o.virtuemart\u order\u id上的ou

左连接uuu virtuemart_uuserfield_u值为uv ON uv.fieldvalue=ou.provincia

其中o.order\U status='U'或o.order\U status='C'或o.order\U status='S',pc.virtuemart\U活动\U id='133',ou.address\U type='ST'order BY o.virtuemart\U order\U id ASC


现在,y从查询中删除,ou.address_type='ST'并使用foreach从结果中删除重复项,但我想在同一个查询中完成这一切

select t1.*
from your_table t1
join
(
  select order_id, max(type) as type
  from your_table
  group by order_id
) t2 on t1.order_id = t2.order_id and t1.type = t2.type

下面是另一种通过在GROUP_CONCAT上使用SUBSTRING_INDEX获得所需输出的方法


一种方法是,如果“Type”是“ST”,则包括它,或者如果您的表有一个唯一的行,例如,在您的情况下,id 2,则也包括它

SELECT * FROM table1 t1 
WHERE t1.TYPE='ST' OR
t1.ORDER_ID IN (select ORDER_ID from table1 group by ORDER_ID having  count(*)=1 )

虽然它有嵌套查询,但考虑到您没有太多数据,它很容易实现。

一种方法是,如果“Type”是“ST”,则包括它,或者如果您的表有一个唯一的行,例如,在您的情况下,id 2,则也包括它

SELECT * FROM table1 t1 
WHERE t1.TYPE='ST' OR
t1.ORDER_ID IN (select ORDER_ID from table1 group by ORDER_ID having  count(*)=1 )

虽然它有嵌套查询,但考虑到您没有太多的数据,它很容易实现。

到目前为止您做了哪些尝试???到目前为止您做了哪些尝试???