无论选择什么,请注意短代码并不总是最佳代码。在许多情况下,如果您的逻辑有足够的分歧,则合并结果确实是最佳的(有时甚至是最干净的编程方式)选项。
就是说,WHERE子句中的以下OR似乎涵盖了您的两种情况…
SELECT DISTINCT
shops.*,
DA.delivery_cost,
DA.postcode AS AreaPostcode
FROM
shops
INNER JOIN
shops_delivery_area as DA
ON (DA.shop_id = shops.id)
WHERE
(DA.postcode = "Liverpool")
OR
(DA.postcode = shops.postcode AND shops.location = "Liverpool")